对于一些计量经济学工作。
给定(可能)大量的并行数据数组,我经常需要派生多个并行的计算变量数组。
在下面的示例中,我有两个输入数组和两个输出数组,但想象一下,在现实世界中,可能有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更具Python风格,但B似乎更方便简洁,并且使用更多变量可以更好地扩展。在这两种情况下,我都讨厌必须在前面声明变量的多余行。
总体而言,我对上述任何方法都不完全满意。我的推理中缺少什么吗?还是有更好的方法?
使用numpy ...在C ++中执行操作,因此它要快得多(尤其是如果我们假设您的数组大于3个项目)
w = numpy.array([1, -2, 5])
x = numpy.array([0, 3, 2])
y = w+x
z = w-x
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句