我有以下形状的3d numpy数组:
(3600L, 7200L, 3L)
如果任何维度中的任何元素为0,我如何将其他两个维度中相同位置的元素转换为0?
答案 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还是更多,这都有效。这只是一个。