Скажем, у меня есть Numpy тензор X, равный 3 * 3 * 3 (фактические размеры могут отличаться). Я хочу протестировать каждую матрицу в тензоре против другого значения в наборе целых чисел.
Например, если
X=np.array([1,2,3]*9).reshape(3,3,3)
test=np.array([1,2,3])
Желаемый результат будет:
[[[ True, False, False],
[True, False, False],
[True, False, False]],
[[False, True, False],
[False, True, False],
[False, True, False]],
[[False, False, True],
[False, False, True],
[False, False, True]]])
Однако я не могу получить этот результат. X == test возвращает:
array([[[ True, True, True],
[ True, True, True],
[ True, True, True]],
[[ True, True, True],
[ True, True, True],
[ True, True, True]],
[[ True, True, True],
[ True, True, True],
[ True, True, True]]])
Если
test=[[1],[2],[3]]
я получаю:
array([[[ True, False, False],
[False, True, False],
[False, False, True]],
[[ True, False, False],
[False, True, False],
[False, False, True]],
[[ True, False, False],
[False, True, False],
[False, False, True]]])
Тот же результат справедлив и для np.equal. Есть ли какой-нибудь прямой способ сделать это без использования циклов? Похоже, что есть способ, при котором при индексировании
X[[0,1,2],[0,2,1]]
будет получаться
np.array([X[0][0],X[1][2],X[2][1]])
, а не
X[:,[0,2,1]]