首页 > 解决方案 > numpy中的块标量向量乘法

问题描述

我有一个大的一维数组x,我通过连接x_0 ,..., x_m-1不同长度的较小数组得到。我也知道L每个的长度列表x_ia给定一个长度数组m,目标是计算一个平面数组[a[0]*x0, a[1]*x1,...]

例如,如果我有x = np.array([1,2,3,4,5])and a=np.array([2,-1]), L = [2,3],那么结果应该是 np.array([2,4,-3,-4,-5])

有没有比这个幼稚的实现更简单(更快,更pythonic等)的方法在numpy中做到这一点?

L.insert(0,0)
cs = np.cumsum(L)
y = np.empty(x.shape) 
for i in range(m):
    y[cs[i]:cs[i+1]] = a[i] * x[cs[i]:cs[i+1]]

我也可以在 Numba 中执行此操作。

m数量级为数百,每个长度x_i约为 1e6。

标签: pythonarraysnumpy

解决方案


重复awith的元素np.repeat并执行元素乘法 -

y = x*np.repeat(a,L)

推荐阅读