Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算多个并行阵列的最优雅/高效/通灵的方法?_Python_Arrays_Loops_For Loop_Iteration - Fatal编程技术网

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

Python 计算多个并行阵列的最优雅/高效/通灵的方法?,python,arrays,loops,for-loop,iteration,Python,Arrays,Loops,For Loop,Iteration,对于一些计量经济学的工作 在给定(可能)大量并行数据数组的情况下,我通常需要导出计算变量的多个并行数组 在下面的示例中,我有两个输入数组和两个输出数组,但想象一下在现实世界中,可能有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

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

在给定(可能)大量并行数据数组的情况下,我通常需要导出计算变量的多个并行数组

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

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


总的来说,我并不完全满意上述任何一种方法。我的推理中缺少了什么东西,还是有更好的方法?

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


我认为@Beasley的建议很有效,我建议在其上使用
多处理
,以便并行生成输出。您的计算似乎完全可以并行化

我能提供的东西比不上这里讨论的技巧:

您考虑过使用吗?Python中的大多数科学计算都是在numpy中完成的。在numpy中,这将是
y=w+x;z=w-x
@senshin,为什么不
y,z=w+x,w-x
?@PadraicCunningham我是说,这有关系吗?他们都做同样的事情。@senshin,是的,一个是pythonic,另一个不是。@PadraicCunningham拜托,你知道我用了分号,因为你不能在评论中使用换行符。谢谢。这是一个赢家。如此简单和优雅。
w = numpy.array([1, -2, 5])
x = numpy.array([0, 3, 2])

y = w+x
z = w-x