首页 > 解决方案 > 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 和索引如何重现与上面相同的结果,这是我想要的结果。

标签: pythonnumpy

解决方案


这是广播的经典应用:

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]]

显然,像加法这样的二元运算不能发出多个数组,但它可以发出一个高维数组,其中包含作为该高维数组的行或列的所有输出数组。

正如评论中所指出的,还有一个外部产品的概括,它在功能上与我展示的广播方法相同。


推荐阅读