沿任意轴进行numpy广播添加

时间:2018-11-08 22:06:26

标签: python numpy

我想通过简单地沿一个或多个轴执行相同的加法来添加两个具有不同尺寸的数组。

非矢量化解决方案:

x = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,0],[1,2]],[[3,4],[5,6],[7,8]],[[9,0],[1,2],[3,4]]]) #shape (4,3,2)
y = np.array([[1,2],[3,4],[5,6],[7,8]]) #shape (4,2)

ans = np.copy(x)
for i in range(x.shape[1]):
    ans[:,i] += y

print(ans) #shape (4,3,2)

如何沿(例如)第二轴广播此广播?更笼统地说,我该如何沿任意轴进行广播?

1 个答案:

答案 0 :(得分:7)

查看两个数组的形状:

git reset --hard abcd12345

您会看到添加内容需要在此处的第0个和最后一个轴上进行广播。一个简单的选择是

dim( test_data[,!(colnames(test_data) %in% c('lable')) ])

在哪里

dim(predict(mod, test_data[,!(colnames(test_data) %in% c('lable')) ],type="prob"))

实际上只是改变了>>> x.shape (4, 3, 2) >>> y.shape (4, 2) 的步幅,因此可以广播添加的内容。


最好还是使用hpaulj在评论中建议的>>> x + y[:, None, :] array([[[ 2, 4], [ 4, 6], [ 6, 8]], [[10, 12], [12, 4], [ 4, 6]], [[ 8, 10], [10, 12], [12, 14]], [[16, 8], [ 8, 10], [10, 12]]]) ,这将增加倒数第二个维度,因此您可以这样做

>>> y[:, None, :].shape
(4, 1, 2)