标签: masked-array

将掩码数组作为简单数组返回,掩码值为 None

我需要a通过另一个数组满足的条件来屏蔽一个数组b

例如,a仅当相同位置的值b等于 0时才应保留值,否则返回为None。例如:

a = np.array([2, 2, 4, 0, 4, 3, 3, 3, 1, 2])
Run Code Online (Sandbox Code Playgroud)

被掩盖了

b = np.array([0, 0, 0, 1, 0, 3, 0, 5, 0, 0])
Run Code Online (Sandbox Code Playgroud)

返回

c: [2, 2, 4, None, 4, None, 3, None, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我试过了

to_change = np.ma.masked_where(travel_time!=0, new_subareas)
Run Code Online (Sandbox Code Playgroud)

但这会返回:

masked_array(data=[2, 2, 4, --, 4, --, 3, --, 1, 2],
             mask=[False, False, False,  True, False,  True, 
                   False,  True, False, False],
                   fill_value=999999)
Run Code Online (Sandbox Code Playgroud)

但是我找不到任何只会返回类似于为c. …

python arrays numpy masked-array

4
推荐指数
1
解决办法
5996
查看次数

在 numpy masked_array 中用 nan 替换 masked

>> masks = [[1,1],[0,0]]    
>> [np.ma.masked_array(data=np.array([1.0,2.0]), mask=m, fill_value=np.nan).mean() for m in masks]
   [masked, 1.5]
Run Code Online (Sandbox Code Playgroud)

我想用 替换masked结果nan。有没有办法直接用 numpy's 来做到这一点masked_array

python numpy masked-array

4
推荐指数
1
解决办法
4829
查看次数

根据另一个列表中的 True/False 过滤列表中的元素

在 vanilla Python 3 中是否有一种惯用的方法来屏蔽数组的元素?例如:

a = [True, False, True, False]
b = [2, 3, 5, 7]
b[a]
Run Code Online (Sandbox Code Playgroud)

我希望b[a]能返回[2, 5],但出现错误:

类型错误:列表索引必须是整数或切片,而不是列表

在 R 中,这按我的预期工作(使用c()而不是[]创建列表)。我知道 NumPyMaskedArray可以做到这一点,我正在寻找一种惯用的方法来用普通的 Python 来做到这一点。当然,我可以使用循环并迭代掩码列表和元素列表,但我希望有一种更有效的方法来使用更高级别的抽象来掩码元素。

python list python-3.x masked-array

4
推荐指数
1
解决办法
2090
查看次数

反转“ numpy.ma.compressed”操作

我想从压缩的蒙版数组和相应的蒙版创建一个数组。用一个例子更容易解释:

>>> x=np.ma.array(np.arange(4).reshape((2,2)), mask = [[True,True],[False,False]])
>>> y=x.compressed()
>>> y
array([ 2,  3])
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个与x形状相同的数组,其中被掩码的值获得一个标准值(例如-1),其余的用给定的数组填充。它应该像这样工作:

>>> z = decompress(y, mask=[[True,True],[False,False]], default=-1)
>>> z
array([[-1, -1],
       [ 2,  3]])
Run Code Online (Sandbox Code Playgroud)

问题是:是否有类似“解压缩”的方法,还是我需要自己编写代码?在Fortran中,这是通过“ pack”和“ unpack”方法完成的。感谢您的任何建议。

python numpy masked-array

3
推荐指数
1
解决办法
389
查看次数

np.where和掩码数组

由于我在stackoverflow上获得了一些帮助,因此我正在使用蒙版数组,但是我在使用np.where评估蒙版数组时遇到了问题。

我的蒙版数组是:

m_pt0 = np.ma.masked_array([1, 2, 3, 0, 4, 7, 6, 5],
                           mask=[False, True, False, False,
                                 False, False, False, False])
Run Code Online (Sandbox Code Playgroud)

并打印如下:

In [24]: print(m_pt0)
[1 -- 3 0 4 7 6 5]
Run Code Online (Sandbox Code Playgroud)

我正在寻找m_pt0中的索引,其中m_pt0 = 0,我希望

np.where(0 == m_pt0)
Run Code Online (Sandbox Code Playgroud)

会返回:

(array([3]))
Run Code Online (Sandbox Code Playgroud)

但是,尽管戴了口罩(或因为?),我反而得到了

(array([1, 3]),)
Run Code Online (Sandbox Code Playgroud)

使用掩码的全部目的是避免访问“空白”的索引,因此如何使用where(或其他函数)仅检索未掩码且与我的布尔条件匹配的索引。

python arrays numpy boolean-operations masked-array

2
推荐指数
1
解决办法
2170
查看次数

对 numpy 屏蔽数组的操作给出屏蔽的无效值

来自 numpy数组上的 numpy 操作中的屏蔽数组的文档:

numpy.ma 模块附带了大多数 ufunc 的特定实现。每当输入被屏蔽或超出有效域时,具有有效域(例如对数或除法)的一元和二元函数都会返回屏蔽常量:例如:

ma.log([-1, 0, 1, 2])
masked_array(data = [-- -- 0.0 0.69314718056],
             mask = [ True  True False False],
       fill_value = 1e+20)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,对于我的计算,我需要知道这些无效操作是在哪里产生的。具体来说,我想要这样:

ma.log([-1, 0, 1, 2])
masked_array(data = [np.nan -- 0.0 0.69314718056],
             mask = [ True  True False False],
       fill_value = 1e+20)
Run Code Online (Sandbox Code Playgroud)

冒着这个问题成为对话的风险,我的主要问题是:

masked_array在计算出的无效值(由fix_invalidnp.nan 和 np.inf 等“固定”的值)不会转换为(并与)掩码值合并的情况下,有什么好的解决方案可以解决这个问题?

我当前的解决方案是计算 上的函数masked_array.data,然后用原始掩码重建掩码数组。但是,我正在编写一个应用程序,它将用户的任意函数映射到许多不同的数组上,其中一些被屏蔽,一些则没有,并且我希望避免仅针对屏蔽数组的特殊处理程序。此外,这些数组在 MISSING、NaN 和 Inf 之间存在区别,这一点很重要,因此我不能只使用带有np.nans 的数组而不是masked值。


此外,如果有人对这种行为存在的原因有任何看法,我想知道。在同一操作中使用此功能似乎很奇怪,因为对未屏蔽值进行操作的结果的有效性实际上是用户的责任,用户可以选择使用该函数来“清理” fix_invalid

此外,如果有人知道 numpy 中缺失值的进展情况,请分享,因为最旧的帖子是 2011-2012 …

python arrays numpy missing-data masked-array

2
推荐指数
1
解决办法
1593
查看次数