NumPy跨尺寸转换元素

NumPy跨尺寸转换元素,numpy,Numpy,我有以下形状的3d numpy阵列: (3600L, 7200L, 3L) 如果任何维度中的任何元素为0,如何将其他两个维度中相同位置的元素转换为0?如果元素为0,则每个维度中的元素均为0。我将用一个小的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]

我有以下形状的3d numpy阵列:

(3600L, 7200L, 3L)

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

如果元素为0,则每个维度中的元素均为
0
。我将用一个小的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.其中
给出了符合某些条件的坐标:

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个元素还是更多元素,此选项都有效。这里只有一个。

啊,很抱歉,从您的回答中,我知道我只需要跨列更改。此外,我不知道如何通过编程来完成(你手动知道0个位置)。你能帮我做吗?我的意思是如何知道0在哪里,并将0转换为其他列中的位置。而且我真的有一个很大的数组,因此需要更快的计算速度。我添加了
where
来确定坐标。比什么更快?像这样的切片操作是最快的。