【发布时间】:2015-09-09 07:39:29
【问题描述】:
我知道我可以做到np.subtract.outer(x, x)。如果x 的形状为(n,),那么我最终得到一个形状为(n, n) 的数组。但是,我有一个形状为(n, 3) 的x。我想输出形状为(n, n, 3) 的东西。我该怎么做呢?也许np.einsum?
【问题讨论】:
标签: python-3.x numpy numpy-einsum
我知道我可以做到np.subtract.outer(x, x)。如果x 的形状为(n,),那么我最终得到一个形状为(n, n) 的数组。但是,我有一个形状为(n, 3) 的x。我想输出形状为(n, n, 3) 的东西。我该怎么做呢?也许np.einsum?
【问题讨论】:
标签: python-3.x numpy numpy-einsum
您可以在使用None/np.newaxis 扩展维度后使用broadcasting 形成x 的3D 数组版本并从中减去原始的2D 数组版本,就像这样 -
x[:, np.newaxis, :] - x
示例运行 -
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]]])
【讨论】: