首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy:如何将(4,) array和(9,9) array添加到(9,9,4) array?

Numpy:如何将(4,) array和(9,9) array添加到(9,9,4) array?
EN

Stack Overflow用户
提问于 2020-08-07 10:48:04
回答 1查看 65关注 0票数 2
代码语言:javascript
运行
复制
import numpy as np
a = np.array([0, 10, 11, 1])
 
# OUT:
# array([ 0, 10, 11,  1])
 
b = np.arange(81).reshape(9, 9)
# OUT:
# array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
#       [ 9, 10, 11, 12, 13, 14, 15, 16, 17],
#       [18, 19, 20, 21, 22, 23, 24, 25, 26],
#       [27, 28, 29, 30, 31, 32, 33, 34, 35],
#       [36, 37, 38, 39, 40, 41, 42, 43, 44],
#       [45, 46, 47, 48, 49, 50, 51, 52, 53],
#       [54, 55, 56, 57, 58, 59, 60, 61, 62],
#       [63, 64, 65, 66, 67, 68, 69, 70, 71],
#       [72, 73, 74, 75, 76, 77, 78, 79, 80]])

我希望b数组的每一项都添加到a数组中,并得到类似的结果,就像一个简单的循环可以做到的那样:

代码语言:javascript
运行
复制
result = list()

for row in b:
    ls = list()
    
    for i in row:
        c = a + i
        ls.append(c)

    result.append(ls)
np.array(result)

循环效率不够高,有没有办法使用Numpy广播规则来得到这个结果?(Numpy数组)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 10:52:54

一种“通用”的方法是使用None进行索引。如果使用None为数组编制索引,则会创建一个新轴并沿该轴广播该数组。

所以如果你有a.shape = (4,)b.shape = (9,9),你可以像这样添加:

代码语言:javascript
运行
复制
a[:,None,None] + b[None,:,:]

a索引中的:a的唯一轴,大小为4。其余两个轴None,None是广播以匹配b的新轴。

b索引中的:,:索引是数组中的轴,形状为(9,9)None是一个新的axis,广播以匹配a

可能有一种更短的方法来编写它,但我不想费心记住隐式广播的规则是如何工作的,所以我只是将其显式地写出来。

如果更清楚,您也可以使用numpy.newaxis,但它具有相同的效果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63294463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档