我试图执行以下操作:
我有一个(4,2)形的数组:
a = np.array([[-1, 0],[1, 0],[0, -1], [0, 1]])
我有另一个(2,2)形阵列:
b = np.array([[10, 10], [5, 5]])
我想将它们沿着b行连接并连接起来,以便我最终得到:
[[ 9, 10],
[11, 10],
[10, 9],
[10, 11],
[4, 5],
[6, 5],
[5, 4],
[5, 6]]
前4个元素是b [0] + a,后4个元素是b [1] + a。如果b是(N,2)形,而不是在元素上使用for循环,我怎么能概括呢?
答案 0 :(得分:3)
您可以使用broadcasting
以矢量化方式获取所有求和以获得3D数组,然后可以将其堆叠到具有np.vstack
的2D数组中以获得所需的输出。因此,实现将是这样的 -
np.vstack((a + b[:,None,:]))
示例运行 -
In [74]: a
Out[74]:
array([[-1, 0],
[ 1, 0],
[ 0, -1],
[ 0, 1]])
In [75]: b
Out[75]:
array([[10, 10],
[ 5, 5]])
In [76]: np.vstack((a + b[:,None,:]))
Out[76]:
array([[ 9, 10],
[11, 10],
[10, 9],
[10, 11],
[ 4, 5],
[ 6, 5],
[ 5, 4],
[ 5, 6]])
你可以用一些重塑替换np.dstack
,这可能会更有效率,就像这样 -
(a + b[:,None,:]).reshape(-1,a.shape[1])