我正在尝试向量化/广播(不确定它正式称为什么)我的代码以使其更快,但我无法完全理解它。我认为我应该使用的是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
任何人都可以提供答案或提示吗?
答案 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,)