对于一些计量经济学的工作。
我经常需要根据(可能)大量的并行数据数组派生多个并行计算变量数组。
在下面的例子中,我有两个输入数组和两个输出数组,但想象在现实世界中可能会有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)
第二种方法:
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与C:我知道C更符合Pythonic的风格,但B似乎更方便、更简洁,并且随着更多变量的添加可以更好地扩展。在这两种情况下,我都讨厌要在额外的行上声明变量。
总体而言,我对以上任何一种方法都不完全满意。我的理解是否存在问题或者是否有更好的方法?
y = w + x; z = w - x
。 - senshin