如何将一个向量串联成numpy矩阵的行?

5
假设有以下NumPy向量a和矩阵b

import numpy as np
a = np.array([1,2])
b = np.array([[3,4],[5,6]])

我想将向量a连接到矩阵b中的每一行。期望输出如下:
output=np.array([[1,2,3,4],[1,2,5,6]])

我有以下可用的代码:

output=np.array([np.concatenate((a,row)) for row in b] )

有没有更快的NumPy函数来执行这样的任务?欢迎任何建议!

4个回答

5
output = np.zeros((2,4), int)
output[:, :2] = a    # broadcasts (2,) to (1,2) to (2,2)
output[:, 2:] = b

3
你可以使用np.broadcast_toa广播至与b相同的形状,然后使用np.hstack将它们水平堆叠:
np.hstack([np.broadcast_to(a, b.shape), b])
array([[1, 2, 3, 4],
       [1, 2, 5, 6]])

2

我对你的解决方案进行了“快速”比较,并与其他方案进行了比较。由于它们都能够实现相同的结果,因此重要的是要看哪个执行效果更好。

在这里输入图像描述


你忘了邀请我参加聚会;-)。顺便说一句:比较得很好! - Ruthger Righart
1
@RuthgerRighart,这是给你的;p - Utpal Kumar
1
第二快,还不错 :-) - Ruthger Righart
1
要在numpy中获得代表性的时间,您需要尝试使用更大的数组。 - yatu
对于这样小的数组大小,这些时间甚至不能代表性能上的实际差异。你只是看到了涉及numpy函数的开销差异。在实际情况下,“连接+for循环”不会像其他方法一样表现得很好。 - yatu

1
您可以使用reshapeconcatenate:
np.concatenate((np.concatenate((a.reshape(1,2), a.reshape(1,2))), b), axis=1)

或许更好的方法是使用tile
np.concatenate((np.tile(a.reshape(1,2), (2,1)), b), axis=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接