我想屏蔽一个多维数组,比如4D数组A
的形状N
xN
xN
xN
,其中我有一个不同的屏蔽(a
,b
,和c
)用于最后的三维。所以a
、b
和c
是值为True
和False
长度N
的向量。试图将A
屏蔽为A[:,a,b,c]
会产生一个异常(这是为了做什么?),A[:,:,:,d][:,:,c][:,b]
作品,
但会产生不必要的中间产物。如果每个维度都有掩码,我会使用它们作为A[numpy.ix_(a, b, c, d)]
来创建一个中间索引数组,但我不想创建一个虚拟掩码a
,即True
。谢谢。你知道吗
编辑:
import numpy as np
A = np.arange(3**4).reshape((3,3,3,3))
a = np.asarray([True, True, True])
b = np.asarray([False, False, True])
c = np.asarray([True, True, False])
B = A[:,:,:,c][:,:,b][:,a]
print(B)
B2 = A[:,a,b,c]
print(B2)
输出:
[[[[ 6 7]]
[[15 16]]
[[24 25]]]
[[[33 34]]
[[42 43]]
[[51 52]]]
[[[60 61]]
[[69 70]]
[[78 79]]]]
Traceback (most recent call last):
File "test2.py", line 11, in <module>
B2 = A[:,a,b,c]
IndexError: shape mismatch: indexing arrays could not be broadcast
together with shapes (3,) (1,) (2,)
您可以使用转置技巧来实现这一点:
相关问题 更多 >
编程相关推荐