假设我有一个像这样的 (3,3,3) 数组。
array([[[1, 1, 1],
[1, 1, 1],
[0, 0, 0]],
[[2, 2, 2],
[2, 2, 2],
[2, 2, 2]],
[[3, 3, 3],
[3, 3, 3],
[1, 1, 1]]])
如何获得与 3 个值的每个向量和第零个值之间的欧氏距离相对应的 9 个值?
比如执行 numpy.linalg.norm([1,1,1] - [1,1,1])
2 次,然后执行 norm([0, 0,0] - [0,0,0])
,然后 norm([2,2,2] - [1,1,1])
2 次,norm([2,2,2] - [0,0,0])
,然后 norm([3,3,3] - [1,1,1])
2次,最后是norm([1,1,1] - [0,0,0])
。
有什么好的方法可以对其进行矢量化吗?我想将距离存储在 (3,3,1) 矩阵中。
结果将是:
array([[[0. ],
[0. ],
[0. ]],
[[1.73],
[1.73],
[3.46]]
[[3.46],
[3.46],
[1.73]]])
最佳答案
keepdims
参数在 numpy 1.7 中添加,您可以使用它来保留总和轴:
np.sum((x - [1, 1, 1])**2, axis=-1, keepdims=True)**0.5
结果是:
[[[ 0. ]
[ 0. ]
[ 0. ]]
[[ 1.73205081]
[ 1.73205081]
[ 1.73205081]]
[[ 3.46410162]
[ 3.46410162]
[ 0. ]]]
编辑
np.sum((x - x[0])**2, axis=-1, keepdims=True)**0.5
结果是:
array([[[ 0. ],
[ 0. ],
[ 0. ]],
[[ 1.73205081],
[ 1.73205081],
[ 3.46410162]],
[[ 3.46410162],
[ 3.46410162],
[ 1.73205081]]])
关于python - 如何在 numpy 中获取 3x3x3 数组上的欧几里德距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16474947/