gpt4 book ai didi

python - 屏蔽多维 NumPy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:49 25 4
gpt4 key购买 nike

我想屏蔽一个多维数组,比如 4D 数组 A形状N xN xN xN ,其中最后三个维度有不同的掩码( abc )。所以a , b ,和c是值为 True 的向量和False长度N 。试图掩盖AA[:,a,b,c]产生异常(这试图做什么?),A[:,:,:,d][:,:,c][:,b]作品,但会产生不必要的中间体。如果我对每个维度都有 mask ,我会将它们用作 A[numpy.ix_(a, b, c, d)]创建中间索引数组,但我不想创建虚拟掩码 aTrue到处。谢谢。

编辑:

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,)

最佳答案

您可以使用转置技巧来实现这一点:

In [19]: (A.T[np.ix_(c.T, b.T, a.T)]).T
Out[19]:
array([[[[ 6, 7]],

[[15, 16]],

[[24, 25]]],


[[[33, 34]],

[[42, 43]],

[[51, 52]]],


[[[60, 61]],

[[69, 70]],

[[78, 79]]]])

关于python - 屏蔽多维 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52721198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com