Python 计算numpy memmap无穷输出的均值和方差

Python 计算numpy memmap无穷输出的均值和方差,python,numpy,memory,Python,Numpy,Memory,创建memmap阵列: out = np.memmap('my_array.mmap', dtype=np.float16, mode='w+', shape=(num_axis1, num_axis2)) for index,row in enumerate(temp_train_data): __,cd_i=pywt.dwt(X_train[index:index+1001].ravel(),'haar') out[index]=(cd_i) (Pdb

创建memmap阵列:

  out = np.memmap('my_array.mmap', dtype=np.float16, mode='w+', shape=(num_axis1, num_axis2))
  for index,row in enumerate(temp_train_data):
        __,cd_i=pywt.dwt(X_train[index:index+1001].ravel(),'haar')
        out[index]=(cd_i)
(Pdb) out.shape
(1421392L, 3504L)
现在,我只需要缩放这个数组。用平均值减去,用方差除

np.mean(out[:,1])
memmap(inf, dtype=float16)
输出是
memmap(inf,dtype=float16)
我不明白为什么

可复制示例:

import numpy as np
ut = np.memmap('my_array.mmap', dtype=np.float16, mode='w+',\
  shape=(140000, 3504))
for index,row in enumerate(ut):
    ut[index]=np.random.rand(1,3504)*10
print np.max(ut[:,1])
print np.mean(ut[:,1],axis=0)
10.0

inf

,则
float16
数据类型无法处理大于65520的整数。集合中所有值的总和可能大于此值,因此在计算平均值时,它会被四舍五入到无穷大

考虑使用具有较高上限的数据类型。例如,
float32

ut = np.memmap('my_array.mmap', dtype=np.float32, mode='w+',\
  shape=(140000, 3504))
当我进行此更改时,我得到了一些不错的非无限输出:

9.99996471405
4.9927

或者,如果确实需要使用
float16
数组,则可以指定用于计算平均值的类型:

print np.mean(ut[:,1],axis=0,dtype=np.float32)

您可能想在这里提供更多的信息并创建一个工作代码示例……因为我不知道您的示例数据:您没有为
np.mean
提供一个轴,因此计算切片中所有元素的平均值。如果其中有任何无穷大的值,那么输出可能也会显示
inf
。@dux请再次检查。感谢您的明确解释。但那会超出我的记忆。是否可以通过不同数据类型的数组设置聚合变量。这样可以节省大量内存。嗯,在这种情况下,您可能可以打印np.mean(ut[:,1],axis=0,dtype=np.float32)。非常感谢@凯文。