python - 有什么方法可以优化 numpy stats 函数(例如,通过 numexpr)?

标签 python numpy

我需要在网格点数据的大型多维 ndarray 上计算标准差和其他统计数据。示例:

import numpy as np
# ... gridded data are read into g1, g2, g3 arrays ...
allg = numpy.array( [g1, g2, g3] )
allmg = numpy.ma.masked_values(allg, -99.)
sd = numpy.zeros((3, 3315, 8325))
np.std(allmg, axis=0, ddof=1, out=sd)

我已经在各个网站上看到了将 numpy 计算包装在 numexpr.evaluate() 中的性能优势,但我认为没有办法在 numexpr.evaluate() 中运行 np.std() (如果我错了)。还有其他方法可以优化 np.std() 调用吗?目前在我的系统上计算大约需要 18 秒...希望能够以某种方式使其更快...

最佳答案

也许您可以使用多处理在多个进程中进行计算。但在尝试之前,您可以尝试重新排列数据,以便可以为最后一个轴调用 std() 。这是一个例子:

import numpy as np
import time
data = np.random.random((4000, 4000))

start = time.clock()
np.std(data, axis=0)
print time.clock() - start

start = time.clock()
np.std(data, axis=1)
print time.clock() - start

我电脑上的结果是:

0.511926329834
0.273098421142

由于最后一个轴的所有数据都在连续内存中,因此数据访问将更有效地使用 CPU 缓存。

关于python - 有什么方法可以优化 numpy stats 函数(例如,通过 numexpr)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595688/

相关文章:

Python Numpy 矩阵 - 返回矩阵中包含的值?

python - 从python中的df列中删除特殊字符和字符串

python - 如何提高时间序列重合过滤的性能?

python - python中带有字典的if else语句

python - 机器学习(对抗性图像)

python - 获取多维 NumPy 数组中最大值的位置

python - 将 np.where 与索引一起使用

Python:从字符串的多行中删除空格

Python MySQL 连接器不适用于 SSL

python - 如何在 Python Numpy 中使用 train_test_split 修复值错误