我有一个大的NDAREX X(粗略地(1e3,1e3,1e3)),在这里我想做的操作,包括并且不包括零轴的特定元素(对于第一个和第二个轴的每个元素)。也就是说,有(1e3,1e3)个元素,我想(有时)屏蔽它们。最简单的方法就是构造一个屏蔽数组,Z = np.zeros_like(X, dtype=bool)# assume `inds` is some indexing array which will target# the particular (1e3 x 1e3) elements I'm interested inZ[inds] = TrueY = np.ma.masked_array(X, mask=Z)但这只会为掩蔽阵列额外使用千兆字节的内存。有没有办法在不构造第二个X元素掩码数组的情况下实现这一点?例如,是否可以为掩码构造稀疏矩阵? 最佳答案 如果只想获取“干净”切片,而不是只从某些“行”中获取一些元素,那么可以使用数字索引而不是掩码。例如。:arr = np.array([[[1,2,3,4], [5,6,7,8]], [[9,8,9,8], [7,6,7,6]]])sub_idx = np.array([0,2])sub_arr = arr[:, :, sub_idx]这是arr的子集的副本,即最后一个维度中的第0个和第2个“切片”:array([[[1, 3], [5, 7]], [[9, 9], [7, 7]]])请注意,定义要使用哪些索引的数组只是一维的,这严重降低了它的内存需求。(当然,在您的情况下,拷贝仍然占用大量内存。)还要注意,这会给您一个副本,因此对结果(sub_arr)所做的任何更改都不会显示在原始数组中。为此,必须将阵列复制回:sub_arr[:] = 0 # Manipulate the valuesarr[sub_idx] = sub_arr关于python - numpy掩码数组可有效利用内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44416217/
10-11 12:50