繁体   English   中英

最优雅/高效/ Pythonic计算多个并行阵列的方法?

[英]Most elegant/efficient/Pythonic way to calculate multiple parallel arrays?

对于一些计量经济学的工作。

给定(可能)大量并行数据阵列时,我经常需要派生多个并行计算变量数组。

在下面的例子中,我有两个输入数组和两个输出数组,但想象在现实世界中可以有5-10个输入和输出数组。

w,x是输入
y,z是输出

方法A:

w = [1, -2, 5]
x = [0, 3, 2]
N = len(w)
I = range(N)
y = map(lambda i: w[i] + x[i], I)
z = map(lambda i: w[i] - x[i], I)

方法B:

w = [1, -2, 5]
x = [0, 3, 2]
N = len(w)
I = range(N)
y, z = [], []
for i in I:
  y.append(w[i] + x[i])
  z.append(w[i] - x[i])

方法C:

w = [1, -2, 5]
x = [0, 3, 2]
y, z = [], []
for w_i, x_i in zip(w, x):
  y.append(w_i + x_i)
  z.append(w_i - x_i)

方法D:

w = [1, -2, 5]
x = [0, 3, 2]
N = len(w)
I = range(N)
(y, z) = transpose(map(lambda i: [w[i] + x[i], w[i] - x[i]], I))

D似乎是最简洁,可扩展和高效的。 但它也是最难阅读的,特别是对于许多具有复杂公式的变量。

A是我最喜欢的,有一点重复,但是每个可修改的循环构建效率是否低效? 这不会随着大数据而扩展吗?

B vs. C:我知道C更像pythonic,但B似乎更方便和简洁,并且随着更多变量更好地扩展。 在这两种情况下,我讨厌额外的行,我必须预先声明变量。

总的来说,我对上述任何方法都不满意。 我的推理是否缺少某些东西,或者有更好的方法吗?

使用numpy ...在C ++中执行操作所以它更快......(特别是如果我们假设你的数组比3个项目大得多)

w = numpy.array([1, -2, 5])
x = numpy.array([0, 3, 2])

y = w+x
z = w-x

我认为@Beasley的建议效果很好,我建议在它之上使用multiprocessing ,以便输出生成并行。 你的计算似乎完全可并行化!

我能提供的内容无法超越这里讨论的技巧: python是否支持多处理器/多核编程?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM