调用masked_array
(类构造函数)和masked_where
函数似乎做的是完全相同的事情,都是在给定数据和掩码值的情况下构造一个numpy掩码数组。
>>> import numpy as np
>>> import numpy.ma as MA
>>> vals = np.array([0,1,2,3,4,5])
>>> cond = vals > 3
>>> vals
array([0, 1, 2, 3, 4, 5])
>>> cond
array([False, False, False, False, True, True], dtype=bool)
>>> MA.masked_array(data=vals, mask=cond)
masked_array(data = [0 1 2 3 -- --],
mask = [False False False False True True],
fill_value = 999999)
>>> MA.masked_where(cond, vals)
masked_array(data = [0 1 2 3 -- --],
mask = [False False False False True True],
fill_value = 999999)
masked_array
也支持copy
到masked_where
的可选参数(它唯一的文档可选参数),所以我没有看到任何masked_where
独有的选项。虽然相反的情况不成立(例如masked_where
不支持dtype
),但我不明白masked_where
作为一个单独函数的用途。
2条答案
按热度按时间js4nwp541#
masked_array
是MaskedArray类的别名。当您使用它时,没有参数验证。masked_where
是一个函数,用于创建MaskedArray
的示例,以检查参数。hmae6n7t2#
您的评论:
如果我用形状不一致的值和掩码数组调用它们,在这两种情况下都会得到相同的错误消息。
如果不详细说明有什么不同,我想我们帮不了你。
例如,如果我尝试明显的不一致性,即长度,我得到不同的错误消息:
从Corralian显示的代码中可以明显看出对
where
消息的测试。Masked_Array
类定义具有以下测试:只有当形状通过了
where
测试,但被类的测试捕获时,我才期望得到相同的消息。如果是这样,在完整的错误追溯中应该是显而易见的。下面是一个在
where
上失败的示例,但它通过了base。基类可以处理
cond
与shape
不同,但与size
(元素总数)匹配的情况。它尝试对其进行整形。标量cond
通过这两种情况,尽管确切的测试不同。根据我对代码的阅读,我无法想象有什么差异可以通过
where
,但不能通过base。所有的掩码数组代码都是python可读的(参见另一个答案的链接)。虽然有一个基类定义,但有许多构造函数或帮助函数,正如
where
文档所阐明的那样。我不会太担心使用哪个函数,特别是如果你不想突破逻辑界限的话。掩码数组虽然长期以来一直是
numpy
的一部分,但并没有得到很大的使用,至少从SO问题的相对缺乏来看是这样。我怀疑pandas
在处理可能有缺失值的数据(例如时间序列)时已经在很大程度上取代了它。