【问题标题】:Can numpy create n arrays by summing n elements in 1d array to each element of another 1d array?numpy 可以通过将一维数组中的 n 个元素与另一个一维数组的每个元素相加来创建 n 个数组吗?
【发布时间】:2021-12-20 10:49:44
【问题描述】:

找不到符合这个确切标准的问题/答案,但如果这是一个重复的问题,我会删除它。是否有与以下代码等效的 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's answer here 收集的那样,使用 range 迭代一个 numpy 数组是最糟糕的。但我看不到 ufunc 和索引如何重现与上面相同的结果,这是我想要的结果。

【问题讨论】:

标签: python numpy


【解决方案1】:

这是broadcasting的经典应用:

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

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

正如 cmets 中所指出的,还有一个 generalization of the outer product,它在功能上与我展示的广播方法相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2015-08-15
    相关资源
    最近更新 更多