I know I can do np.subtract.outer(x, x)
. If x
has shape (n,)
, then I end up with an array with shape (n, n)
. However, I have an x
with shape (n, 3)
. I want to output something with shape (n, n, 3)
. How do I do this? Maybe np.einsum
?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can use broadcasting
after extending the dimensions with None
/np.newaxis
to form a 3D array version of x
and subtracting the original 2D array version from it, like so -
x[:, np.newaxis, :] - x
Sample run -
In [6]: x Out[6]: array([[6, 5, 3], [4, 3, 5], [0, 6, 7], [8, 4, 1]]) In [7]: x[:,None,:] - x Out[7]: array([[[ 0, 0, 0], [ 2, 2, -2], [ 6, -1, -4], [-2, 1, 2]], [[-2, -2, 2], [ 0, 0, 0], [ 4, -3, -2], [-4, -1, 4]], [[-6, 1, 4], [-4, 3, 2], [ 0, 0, 0], [-8, 2, 6]], [[ 2, -1, -2], [ 4, 1, -4], [ 8, -2, -6], [ 0, 0, 0]]])