簡體   English   中英

使用 numpy 在 for 循環內部和外部向向量添加標量有區別嗎?

[英]Is there a difference between adding a scalar to a vector inside a for loop and outside it, using numpy?

我試圖在替換此代碼段的 for 循環時利用 Python 的 Broadcasting 屬性:

import numpy as np
B = np.random.randn(10,1)
k = 25
for i in range(len(B)):
  B[i][0]= B[i][0] + k

有了這個:

for i in range((lenB)):
  B=B+k

我觀察到我得到了不同的結果。 當我在循環外嘗試時,B = B+k,給出了與我期望的 B[i][0] = B[i][0] + k 相同的結果

為什么會這樣? 廣播在循環內是否遵循不同的規則?

在您的第二個選項中,您需要執行以下操作:

B=B+k

正如你看到的,你不需要for循環,這是遠遠快於循環在“矢量”( numpy陣列)。

它是某種形式的“矢量化”計算,而不是迭代計算,在復雜性和可讀性方面更好。 兩者都會產生相同的結果。

你可以看到很多的例子在矢量VS迭代,包括運行時間, 在這里

您可以看到Andrew Ng 介紹numpy 廣播屬性的 精彩視頻

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM