大多数 elegant/efficient/Pythonic 计算多个并行数组的方法?

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

一些计量经济学的工作。

我经常需要在给定(可能)大量并行数据数组的情况下派生多个计算变量的并行数组。

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

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

方法一:

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)

方法二:

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,以便并行生成输出。您的计算似乎完全可以并行化!

我能提供的不能胜过这里讨论的提示: Does python support multiprocessor/multicore programming?