簡體   English   中英

消除Numpy中的循環-正確廣播

[英]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.

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