NumPy跨维度转换元素

时间:2015-07-26 03:35:45

标签: numpy

我有以下形状的3d numpy数组:

(3600L, 7200L, 3L)

如果任何维度中的任何元素为0,我如何将其他两个维度中相同位置的元素转换为0?

1 个答案:

答案 0 :(得分:4)

如果元素为0,则为0 in each of the dimensions。我将用一个小的2d数组来说明:

In [1240]: M=np.arange(9).reshape(3,3)
In [1241]: M
Out[1241]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [1242]: M[0,0]
Out[1242]: 0

一个元素是0,0行和0列。我可以将这两个维度的其余部分设置为0:

In [1243]: M[0,:]=0

In [1244]: M[:,0]=0

In [1245]: M
Out[1245]: 
array([[0, 0, 0],
       [0, 4, 5],
       [0, 7, 8]])

您可以将其推广到3d和更大的数组。只要您知道所有维度中该元素的坐标。使用3d数组

M[i,:,:]=0

实际上将平面(2d)中的所有值设置为0.类似地,M[:,j,:]M[:,:,k]

np.where给出了符合某些条件的坐标:

In [1248]: I=np.where(M==0)

In [1249]: M[I[0],:]=0

In [1250]: M[:,I[1]]=0

In [1251]: M
Out[1251]: 
array([[0, 0, 0],
       [0, 4, 5],
       [0, 7, 8]])

In [1252]: 

In [1252]: I
Out[1252]: (array([0], dtype=int32), array([0], dtype=int32))

无论匹配是针对1个元素,0还是更多,这都有效。这只是一个。