如果该值在另一个列表中被屏蔽,则从列表中删除元素
Deleting elements from a list if that value is masked in another list
我已经导入了具有递增整数的 numpy 掩码数组格式的数据。被屏蔽的元素是不规则的并且不重复,例如打印它会产生:
masked = [0,1,--,3,--,5,6,--,--,9,--]
我还有另一个递增数字列表,它不是从零开始的,有不规则的间隙,大小与 masked
:
不同
data = [1,3,4,6,7,9,10]
我想删除 data
的任何元素,如果它的值是 masked
中的屏蔽元素
所以我得到:
result = [1,3,6,9]
因为 4、7 和 10 是 masked
中的屏蔽值。
我认为我的伪代码应该类似于:
for i in len(masked):
if masked[i] = 'masked' && data[i] == [i]:
del data[i]
但是我无法协调两个数组的不同长度和不匹配的索引,
感谢您的帮助!
您可以使用 set 函数获取列表集并取其交集。
这是一个演示:-
>>> import numpy as np
>>> import numpy.ma as ma
>>> arr = np.array([x for x in range(11)])
>>> masked = ma.masked_array(arr, mask=[0,0,1,0,1,0,0,1,1,0,1])
>>> masked
masked_array(data = [0 1 -- 3 -- 5 6 -- -- 9 --],
mask = [False False True False True False False True True False
True],
fill_value = 999999)
>>> data = np.array([1,3,4,6,7,9,10])
>>> result = list(set(data) & set(masked[~masked.mask]))
>>> result
[1, 3, 6, 9]
>>>
确保 data
是一个数组:
data = np.asarray(data)
然后:
data[~masked.mask[data]]
这将非常快,尽管它确实假设您的掩码数组包含从 0 到至少 max(data)
的所有数字。
我已经导入了具有递增整数的 numpy 掩码数组格式的数据。被屏蔽的元素是不规则的并且不重复,例如打印它会产生:
masked = [0,1,--,3,--,5,6,--,--,9,--]
我还有另一个递增数字列表,它不是从零开始的,有不规则的间隙,大小与 masked
:
data = [1,3,4,6,7,9,10]
我想删除 data
的任何元素,如果它的值是 masked
所以我得到:
result = [1,3,6,9]
因为 4、7 和 10 是 masked
中的屏蔽值。
我认为我的伪代码应该类似于:
for i in len(masked):
if masked[i] = 'masked' && data[i] == [i]:
del data[i]
但是我无法协调两个数组的不同长度和不匹配的索引,
感谢您的帮助!
您可以使用 set 函数获取列表集并取其交集。 这是一个演示:-
>>> import numpy as np
>>> import numpy.ma as ma
>>> arr = np.array([x for x in range(11)])
>>> masked = ma.masked_array(arr, mask=[0,0,1,0,1,0,0,1,1,0,1])
>>> masked
masked_array(data = [0 1 -- 3 -- 5 6 -- -- 9 --],
mask = [False False True False True False False True True False
True],
fill_value = 999999)
>>> data = np.array([1,3,4,6,7,9,10])
>>> result = list(set(data) & set(masked[~masked.mask]))
>>> result
[1, 3, 6, 9]
>>>
确保 data
是一个数组:
data = np.asarray(data)
然后:
data[~masked.mask[data]]
这将非常快,尽管它确实假设您的掩码数组包含从 0 到至少 max(data)
的所有数字。