Python 3.x 根据轴索引条件更改4D numpy矩阵中的单元格

Python 3.x 根据轴索引条件更改4D numpy矩阵中的单元格,python-3.x,numpy,vectorization,numpy-ndarray,Python 3.x,Numpy,Vectorization,Numpy Ndarray,假设我有一个4D numpy数组a,其中索引I,j,k,l用于四个维度,假设50x40x30x20。还假设我有一些其他列表B 如何将A中满足某些条件的所有单元格设置为0?有没有一种方法可以在没有循环的情况下高效地执行(使用矢量化?) 示例条件:具有三维索引k的所有单元格,其中B[k]==x 比如说, 如果我们有二维矩阵A=[[1,2],[3,4]和B=[7,8] 然后对于A(即列)的第二维,我想将第二维中的所有单元格归零,由此该维中单元格的索引(称为索引i)满足条件B[i]==7。在这种情况下,

假设我有一个4D numpy数组
a
,其中索引
I,j,k,l
用于四个维度,假设
50x40x30x20
。还假设我有一些其他列表
B

如何将
A
中满足某些条件的所有单元格设置为
0
?有没有一种方法可以在没有循环的情况下高效地执行(使用矢量化?)

示例条件:具有三维索引
k
的所有单元格,其中
B[k]==x

比如说,

如果我们有二维矩阵
A=[[1,2],[3,4]
B=[7,8]

然后对于
A
(即列)的第二维,我想将第二维中的所有单元格归零,由此该维中单元格的索引(称为索引
i
)满足条件
B[i]==7
。在这种情况下,A将转换为
A=[[0,0],[3,4]]

以下内容有帮助吗

A = np.arange(16,dtype='float64').reshape(2,2,2,2)
A[A == 2] = 3.14

我用3.14替换等于2的条目。您可以将其设置为其他值。

您可以为特定轴指定布尔数组:

将numpy导入为np
i、 j,k,l=50,40,30,20
a=np.随机.随机((i,j,k,l))
b_k=np.随机.随机(k)
b_j=np.random.random(j)
#i,j,k,l
a[:,:,b_k<0.5,:]=0
#您还可以沿不同的轴组合多个条件
#i,j,k,l
a[:,b_j>0.5,b_k<0.5,:]=0
#或者显式地使用索引
条件k=np.arange(k)%3==0#指数可被3整除吗?
#i,j,k,l
a[:,:,条件k,:]=0
使用您给出的示例


a=np.array([[1,2],
[3, 4]])
b=np.数组([7,8])
#i,j
a[b==7,:]=0
#数组([[0,0],
#        [3, 4]])

Er这是编辑特定(已知)单元格,而不是编辑满足某些条件的所有单元格方括号内的
a==2
是一个条件。您可以用其他条件替换它。例如,要替换您可以执行的所有偶数项:
A[A%2==0]=3.14
我明白了,是否有一种方法可以将该项的索引用作条件的一部分?而不仅仅是输入值?这是根据条件检查其他数组-是否有一个数组使用矩阵a的第三维中的轴?我举了第三个例子,这就是你想要的吗?请注意,我提供的第一个示例与最后一个示例基本相同,只是另一个条件
b
,而不是
b==x
,你想要什么还不太清楚,你能不能给出一个简单的2D示例。完成!增加了一个例子