假设我有一个纽比矢量
A = zeros(100)
我通过一系列断点将它划分为子向量,这些断点索引为A
,例如
因此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
循环,而不是将这些操作矢量化?在
您可以使用简单的^{} -
样本运行-
^{pr2}$如果您想从} -
A
获得这些子向量的平均值,可以使用^{如果您希望扩展此功能并使用一个自定义函数,那么您可能需要研究一下MATLAB的^{} 等价于
Python/Numpy
:accum
,其源代码可用here。在您可以使用^{} :
要计算任意二进制统计信息,可以使用^{} :
^{pr2}$stats.binned_statistic
可以计算平均值、中间值、计数、和;或者, 要计算每个bin的任意统计信息,可以将callable传递给statistic
参数:你的问题并不是一个单一的答案,而是一些你可以用来构建模块的技巧。您可能会发现另一个有用的方法:
所有numpy ufunc都有一个^{} 方法,您可以利用它进行一些计算:
相关问题 更多 >
编程相关推荐