[英]Eliminate loop in numpy - proper broadcasting
我有這個丑陋的循環:
import numpy as np
in1 = np.array( ( (2.2, 2.5) ,
(1.4, 1.7) )
)
out1 = np.array( ( 0.0, 0.0, 0.0 ) )
idx1 = np.array( ( ( 0, 1 ),
( 2, 2 ) )
)
# an ugly loop
for i in xrange(2):
for j in xrange(2):
out1[ idx1[i,j] ] += in1[i,j]
這些循環通常在1000x1000的范圍內運行。 如何正確使用numpy索引? 這不起作用:
out1[ idx1 ] += in1
我們可以展平索引和要分配的值,然后使用np.bincount
來獲取輸出而無需初始化,就像這樣-
out1 = np.bincount(idx1.ravel(), in1.ravel())
另外,要添加到初始化的輸出數組out1
,我們可以使用np.add.at
,就像這樣-
np.add.at(out1, idx1.ravel(), in1.ravel())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.