Я хочу замаскировать многомерный массив, скажем, массив 4D A
формы N
x N
x N
x N
, где у меня есть другая маска (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,)