0

我正在尝试对我的代码进行矢量化/广播(不确定它的正式名称)以使其更快,但我不太明白。我认为我应该使用的是 numpy.cumsum (axis = 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

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

4

1 回答 1

2

诀窍是首先将两个一维数组组合成一个二维数组,然后对其求和。如果您有一个 shape 向量(a,1)并使用一个 shape 数组对其进行广播(b,),则生成的数组将是 shape (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,)
于 2015-10-20T19:07:55.917 回答