python中累积和的矢量化

时间:2015-10-20 18:45:11

标签: python numpy vectorization numpy-broadcasting

我正在尝试向量化/广播(不确定它正式称为什么)我的代码以使其更快,但我无法完全理解它。我认为我应该使用的是numpy.cumsum(轴= 0),但我不知道如何在正确的数组中使用它(快速)来使用它。

我希望这段代码基本上是l1的绝对和,用于将l2中的每个元素添加到l1中的所有数字。所以这不是一个答案,而是len(l2)个答案。下面的(非矢量化)代码给出了正确的输出。

    # l1 and l2 are numpy arrays
    for i in l2:
        l1 += i
        answer = numpy.sum(numpy.absolute(l1))
        print answer

任何人都可以提供答案或提示吗?

1 个答案:

答案 0 :(得分:2)

诀窍是首先将两个一维数组合并为一个二维数组,然后对其进行求和。如果您有一个形状为(a,1)的矢量,并使用形状(b,)的数组广播它,则生成的数组将为(a,b)形状。将长度为1的额外轴添加到数组中以获得此类行为非常方便。

这是一种在没有循环的情况下获得相同答案的方法

# Assume l1 has length n1, l2 has length n2
suml2 = np.cumsum(l2)  # length n2
y = l1 + suml2[:,np.newaxis]  # shape (n2, n1)
answer = np.sum(np.abs(y), axis=1)  # shape (n2,)