我需要在网格点数据的大型多维 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/