Numpy 1.26.4中nanstd传入mean参数报错,如何复用均值优化性能?
解决Numpy 1.26.4中nanstd无法传入mean参数的问题
问题原因
Numpy 1.26.4版本的nanstd函数不支持mean参数,只有普通的std函数提供该参数来避免重复计算均值。
可行解决方案
方案1:手动计算含NaN数组的标准差
基于已算出的nanmean,直接对非NaN元素计算平方差的均值平方根,和nanstd的计算逻辑完全一致,且无需重复计算均值:
import numpy as np print(np.__version__) x = [1,2,3,4,5, np.nan] print(x) mymean = np.nanmean(x) print(mymean) # 获取非NaN元素 x_non_nan = np.asarray(x)[~np.isnan(x)] # 对应nanstd默认ddof=0(总体标准差) mystd = np.sqrt(np.mean((x_non_nan - mymean) ** 2)) # 如果需要样本标准差(ddof=1),用下面的计算方式: # mystd = np.sqrt(np.sum((x_non_nan - mymean) ** 2) / (len(x_non_nan) - 1)) print(mystd)
方案2:过滤NaN后使用普通std函数
先过滤掉数组中的NaN元素,再用支持mean参数的普通std函数计算,同样避免重复计算:
import numpy as np print(np.__version__) x = [1,2,3,4,5, np.nan] print(x) x_non_nan = np.asarray(x)[~np.isnan(x)] mymean = np.mean(x_non_nan) # 和nanmean结果完全一致 print(mymean) # 对应nanstd默认ddof=0,传入已计算的mean mystd = np.std(x_non_nan, mean=mymean) # 若需样本标准差,添加ddof=1: # mystd = np.std(x_non_nan, mean=mymean, ddof=1) print(mystd)
说明
两种方案都能高效处理长数组,避免重复计算均值的开销,计算结果和nanstd完全一致。
内容的提问来源于stack exchange,提问作者scriptkiddie
相关产品推荐
相关产品推荐

