沿轴组合阵列

时间:2015-12-19 11:18:11

标签: python arrays numpy vectorization

我试图执行以下操作:

我有一个(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循环,我怎么能概括呢?

1 个答案:

答案 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])