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

2024-04-20 02:44:42 发布

您现在位置:Python中文网/ 问答频道 /正文

做一些计量经济学的工作。你知道吗

我经常需要在给定(可能)大量并行数据数组的情况下导出计算变量的多个并行数组。你知道吗

在下面的示例中,我有两个输入数组和两个输出数组,但是想象一下在现实世界中,可能有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是我最喜欢的,有一点重复,但是每个VAILABLE构造一个循环是否效率较低?这不会扩展到大数据吗?你知道吗

B与C:我知道C更像python,但B似乎更方便、更简洁,而且随着变量的增加,伸缩性更好。在这两种情况下,我讨厌额外的一行,在那里我必须预先声明变量。你知道吗

总的来说,我对上述任何一种方法都不太满意。我的推理有什么遗漏吗?还是有更好的方法?你知道吗


Tags: 数据方法lambdain示例mapforlen
2条回答

我认为@Beasley的建议很有效,我建议在上面使用multiprocessing,这样输出生成就可以并行进行。你的计算似乎完全可以并行!你知道吗

我能提供的东西比这里讨论的技巧更重要: Does python support multiprocessor/multicore programming?

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

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

y = w+x
z = w-x

相关问题 更多 >