python - numpy 可以通过将一维数组中的 n 个元素与另一个一维数组的每个元素相加来创建 n 个数组吗?
问题描述
找不到符合这个确切标准的问题/答案,但如果这是一个重复的问题,那么我将删除它。是否有与以下代码等效的 numpy 或者将我的代码保持原样/使用 xrange 更好?
x = [i for i in range (50)]
y = [i for i in range (120)]
for i in x:
foo = [i+z for z in y]
print(foo)
这是一个玩具示例,但我正在使用的数据集的范围可以从这样的东西到示例中大小的 1000 倍;我已经尝试过np.idter
,但没有看到太多的性能提升,正如我从bmu 的回答中收集到的那样,使用 range 迭代一个 numpy 数组是最糟糕的。但我看不到 ufunc 和索引如何重现与上面相同的结果,这是我想要的结果。
解决方案
这是广播的经典应用:
import numpy as np
x = np.arange(0,5).reshape(5,1)
y = np.arange(0,12).reshape(1,12)
foos = x + y
print(foos)
[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[ 2 3 4 5 6 7 8 9 10 11 12 13]
[ 3 4 5 6 7 8 9 10 11 12 13 14]
[ 4 5 6 7 8 9 10 11 12 13 14 15]]
显然,像加法这样的二元运算不能发出多个数组,但它可以发出一个高维数组,其中包含作为该高维数组的行或列的所有输出数组。
正如评论中所指出的,还有一个外部产品的概括,它在功能上与我展示的广播方法相同。
推荐阅读
- wso2esb - 如何在 xml 中的 wso2 企业集成器 7 ide 中添加 .csr 证书
- react-native - React Native 我想要嵌套文本中的样式
- kotlin - 查看 Gradle 依赖项的文档
- jquery - 尝试创建机会时出现 Vtiger Web 服务 API 错误
- node.js - 执行操作时如何显示存储在 mongoDB 中的图像文件
- javascript - 即使我的函数有效,为什么我会收到错误“无法读取未定义的属性 itemId”?
- bash - 将 docker 映像推送到 aws ecr 和 bash 脚本
- php - Laravel:如何在帖子列表数据表中显示作者姓名
- android - 如何在本机反应中使用单个导航器而不是多个导航器?
- java - 为什么在Mysql中插入时时间会改变?