矢量化numpy的陣列我試圖找出如何向量化下面的循環:for循環
for i in range(1,size):
if a[i] < a[i-1]:
b[i] = a[i]
else: b[i] = b[i-1]
b是大小相同的(大)陣列。 我可以使用if語句,但你如何同時更換else語句
numpy.where(a[1:]<a[:-1])
更換?
矢量化numpy的陣列我試圖找出如何向量化下面的循環:for循環
for i in range(1,size):
if a[i] < a[i-1]:
b[i] = a[i]
else: b[i] = b[i-1]
b是大小相同的(大)陣列。 我可以使用if語句,但你如何同時更換else語句
numpy.where(a[1:]<a[:-1])
更換?
我想你想是這樣的:
import numpy as np
def foo(a, b):
# cond is a boolean array marking where the condition is met
cond = a[1:] < a[:-1]
cond = np.insert(cond, 0, False)
# values is an array of the items in from a that will be used to fill b
values = a[cond]
values = np.insert(values, 0, b[0])
# labels is an array of increasing indices into values
label = cond.cumsum()
b[:] = values[label]
這表示感謝。現在確保我理解它,然後測試它的速度。 – Jonno
我希望這給你一些加速。如果你有更多關於b的信息,你可能會獲得更多的加速。例如,如果你事先知道b應該單調遞增。 –
我不認爲這是可以向量化,因爲每個元素依賴於前一個。 – Eric
這是一個猜測,但'vectorize'文檔說它的矢量化函數接受*序列*。你能改寫你的循環作爲一個發電機嗎? –