我想计算低于n_par参数和n_样本样本矩阵平均值的标准偏差。到目前为止,我发现最快的方法是:
stdleft = numpy.zeros_like(mean)
for jpar in xrange(mean.shape[1]):
stdleft[jpar] = p[p[:,jpar] < \
mean[jpar],jpar].std()
其中p是一个类似矩阵(n_samples,n_par)。有没有一种更聪明的方法可以不用for循环来完成它?我大概有n_par=200,n_samples=1e8,因此这三条线需要很长时间才能完成。在
任何想法都会很有帮助!在
谢谢你
据我所知,您需要计算每列的标准偏差,其中值低于该列的平均值。在
在numpy中,使用掩码数组是最简单的。在
例如:
您也可以使用
pandas
来实现这一点,正如@SudeepJuvekar所提到的那样。性能应该大体相似,但是熊猫在这个特殊的操作中应该更快一些(未经测试)。在熊猫是你的朋友。转换pandas数据帧中的矩阵,并对数据帧进行逻辑索引。像这样的东西
这将从原始numpy矩阵
^{pr2}$p
创建一个数据帧。然后我们计算数据帧的列平均值。在创建
n_par
大小的数组,包含mat
的所有列。最后,使用<
逻辑操作索引mat
矩阵,并对其应用std
。在类似于
stdright
。花几分钟在我的机器上计算。在这是熊猫的doc页面:http://pandas.pydata.org/
编辑:使用下面的注释进行编辑。您可以使用原始的
p
进行几乎类似的索引。在logical
包含与p
大小相同的布尔矩阵。这就是熊猫派上用场的地方。您可以使用相同大小的逻辑直接索引pandas矩阵。在numpy中这样做有点困难。我想循环是实现它的最好方法?在相关问题 更多 >
编程相关推荐