gpt4 book ai didi

python - 二维 numpy 数组 : remove masked elements

转载 作者:行者123 更新时间:2023-12-05 07:33:37 24 4
gpt4 key购买 nike

假设我有一个像这样的 numpy 掩码数组(其中 -- 是掩码数据):

xlist = [[1000,1001,1002,--],
[2000,2001,2002,2003]]

我想创建一个新数组,其中删除了屏蔽数据,有效地返回如下数组:

xlist = [[1000,1001,1002],
[2000,2001,2002,2003]]

我试过这个:

realXIndex = np.where(xlist.mask)[1]
realX = np.delete(xlist,realXIndex, axis=1)

这有效地从所有子数组中删除了屏蔽值,因此 2003 也被删除,而我想保留它。

如果有人能指出我正确的方向,那将对我有很大帮助。

最佳答案

根据您的第一个 xlist 创建一个掩码数组:

In [283]: xlist = [[1000,1001,1002,-9999],
...: [2000,2001,2002,2003]]
...:
In [284]: M = np.ma.masked_equal(xlist, -9999)
In [285]: M
Out[285]:
masked_array(
data=[[1000, 1001, 1002, --],
[2000, 2001, 2002, 2003]],
mask=[[False, False, False, True],
[False, False, False, False]],
fill_value=-9999)

compressed 删除屏蔽值,但返回一维数组。

In [286]: M.compressed()
Out[286]: array([1000, 1001, 1002, 2000, 2001, 2002, 2003])

我们可以逐行应用压缩:

In [287]: [m.compressed() for m in M]
Out[287]: [array([1000, 1001, 1002]), array([2000, 2001, 2002, 2003])]

或者作为列表的列表,甚至是列表的对象数组:

In [288]: [m.compressed().tolist() for m in M]
Out[288]: [[1000, 1001, 1002], [2000, 2001, 2002, 2003]]
In [289]: np.array(_)
Out[289]:
array([list([1000, 1001, 1002]), list([2000, 2001, 2002, 2003])],
dtype=object)

关于python - 二维 numpy 数组 : remove masked elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516590/

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