【发布时间】:2020-09-17 21:37:16
【问题描述】:
假设我有一个 3*3*3 的 Numpy 张量 X(实际尺寸会有所不同)。我想针对一组整数中的不同值测试张量中的每个矩阵。
例如如果
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==测试返回:
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]]
【问题讨论】:
标签: arrays numpy boolean vectorization tensor