假设我有一个Numpy向量:
A = zeros(100)
我将其通过一个断点列表,这个列表是索引到A
中的位置来将其分成子向量,例如,
breaks = linspace(0, 100, 11, dtype=int)
所以第i个子向量将位于索引
breaks [i]
(包括)和breaks [i + 1]
(不包括)之间。
断点不一定等距,这只是一个示例。但是,它们始终严格递增。现在我想对这些子向量进行操作。例如,如果我想将第i个子向量的所有元素设置为i,我可以执行以下操作:
for i in range(len(breaks) - 1):
A[breaks[i] : breaks[i+1]] = i
或者我想计算子向量的平均值:
b = empty(len(breaks) - 1)
for i in range(len(breaks) - 1):
b = A[breaks[i] : breaks[i+1]].mean()
等等,还有其他的问题。
如何避免使用for
循环而是将这些操作向量化?
breaks
是否预先排序? - DivakarA
,即在此操作后可能存在一些不会更改的 A 元素? - Divakar