首页 > 解决方案 > `numpy.ufunc.outer` 仅适用于某些轴

问题描述

我在空间中有两个 numpy 1D 点数组,我想要每个数组中的点之间的成对差异的 2D 数组。碰巧的是,如果空间是一维的,那么我想要的就相当于

x,y = np.array([1,2,3,4]),np.array([3,4,5,6])
np.difference.outer(x,y)

对于 Nd 空间的差异,我该如何做到这一点?

标签: pythonarraysnumpy

解决方案


这是一种使用 3D 矩阵的方法,它适用于许多维度。

import numpy as np

N = 4 # number of vectors
p = 3 # vector dimensionality
x = np.arange(0, p * N).reshape((N, p))
y = np.arange(2, 2 + p * N).reshape((N, p))

Y = np.zeros((N, N, p))
Y[:] = y # setting rows
X = np.zeros((N, N, p))
X[:] = x
X = np.einsum("ijk->jik", X) # swap rows and columns
diff = np.subtract(X, Y) # reproduces 1D result with p = 0 and print(diff[:,:,0])

使用索引设置 X 矩阵的列可能比设置行然后执行特定的转置更简单。


推荐阅读