2016-11-17 68 views
0

我想將值附加到數組的選擇而無需通過for循環。numpy追加到索引數組(在np.where後)

即,如果欲0值添加到陣列的某些位置:

澄清
a=np.array([[1,2,3,4,5],[1,2,3,4,5]])  
condition=np.where(a>2)  
a[condition]=np.append(a[condition],np.array([0]*len(condition[0]))) 

-> ValueError: shape mismatch: value array of shape (12,) could not be broadcast to indexing result of shape (6,) 

編輯:

我需要添加的值(並且如果需要的尺寸)到選定陣列位置。循環看起來像這樣:

for t in range(len(ind)): 
    c = cols[t] 
    r = rows[t] 
    if data1[r, c] > 2: 
     data2[r,c]=np.append(data2[r,c],t) 

有什麼辦法消除這種循環(100〜000次迭代)?謝謝

+2

期望的結果是什麼? – unutbu

回答

0

讓我們看看片:

In [92]: a=np.array([[1,2,3,4,5],[1,2,3,4,5]])  
    ...: condition=np.where(a>2) 
    ...: 
In [93]: a 
Out[93]: 
array([[1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5]]) 
In [94]: condition 
Out[94]: 
(array([0, 0, 0, 1, 1, 1], dtype=int32), 
array([2, 3, 4, 2, 3, 4], dtype=int32)) 
In [95]: a[condition] 
Out[95]: array([3, 4, 5, 3, 4, 5]) 
In [96]: np.append(a[condition],np.array([0]*len(condition[0]))) 
Out[96]: array([3, 4, 5, 3, 4, 5, 0, 0, 0, 0, 0, 0]) 

您正在嘗試把12個值到6個插槽。沒有可以做!

你在期待什麼?我認爲我不應該猜測。繼續向我們展示循環。