numpy附加到索引数组(在np.where之后)

时间:2016-11-17 14:53:24

标签: python arrays numpy append

我想将值附加到选择的数组而不必经过for循环。

即。如果我想将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次迭代)?感谢

1 个答案:

答案 0 :(得分: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个插槽中。不能做!

你在期待什么?我认为我甚至不应该推测。继续向我们展示循环。