假设我有以下数组(实际上它是一个KxNxM掩码数组,其中存储了1514764800个字段,例如:np.ma.array(data, mask=mask, dtype=np.float32)):
import numpy as np
data = np.random.random((3,4,4))
mask = np.zeros((3,4,4), dtype=bool)
mask[1,2,2] = 1
mask[2,2,2] = 1
mask[2,1,3] = 1
mask[:,2,0] = 1
使用掩码,我可以轻松地将大数据集减少到有效的数据:
newdata = data[mask]
newdata
array([ 0.91336042, 0.78399595, 0.9466537 , 0.75347407, 0.8213428 ,
0.13172648])
为了知道它们所在的行/列和第三维,我可以使用:
pos = np.where(mask)
pos
(array([0, 1, 1, 2, 2, 2], dtype=int64),
array([2, 2, 2, 1, 2, 2], dtype=int64),
array([0, 0, 2, 3, 0, 2], dtype=int64))
这些信息(“newdata”和“pos”)可以保存,这样我就可以节省大量内存和存储空间。但是,我该如何计算例如在data [:,2,2]的所有字段的平均值(在原始数据中)?在我的情况下,newdata有约5300000个条目。
ndarray
并直接应用布尔遮罩,但是在较新版本的 Numpy 中,numpy.ma
模块具有专门用于此目的的特殊masked_array
类型。 - Iguananaut