gpt4 book ai didi

python - 使用 mask 和 np.where 减少数组并用它计算

转载 作者:行者123 更新时间:2023-11-28 17:44:03 25 4
gpt4 key购买 nike

假设我有以下数组(实际上它是一个包含 1514764800 个字段的 KxNxM 掩码数组,存储方式如下: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])

为了知道它们位于哪一行/哪一列和第 3 个维度,我可以使用:

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 个条目。

最佳答案

我建议您使用稀疏数组,而不是屏蔽数组,如果未屏蔽值的比例小于 10%。参见:

关于 3D,如果您不需要它们进行快速计算,您可以通过将两个维度转换为一个维度来解决问题。

关于python - 使用 mask 和 np.where 减少数组并用它计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com