python - numpy中的块标量向量乘法
问题描述
我有一个大的一维数组x
,我通过连接x_0 ,..., x_m-1
不同长度的较小数组得到。我也知道L
每个的长度列表x_i
。a
给定一个长度数组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。
解决方案
重复a
with的元素np.repeat
并执行元素乘法 -
y = x*np.repeat(a,L)
推荐阅读
- javascript - 从 javascript 中的 javascript 方法解析 xml 输出
- javascript - 用jquery隐藏div
- mysql - Mysql更新行删除int二级列间隙
- c# - 用于 python 的 C# GUI 挂起
- javascript - 在没有额外变量的情况下映射 Javascript 对象值?
- python - 如何修复 np.prod() 返回 0?我知道它可以最大化,但它可以最小化吗?
- http - 用户在发出 http 请求时可以看到 JWT 吗?
- javascript - 属性描述必须是新的 react-native 应用程序上的对象红屏错误
- c# - 在写入 CMD 时读取进程输出(未刷新?)
- javascript - 如何高效配置 Webpack?