问题标签 [masked-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
685 浏览

python - numpy.median 在掩码数组上的意外行为

我有一个关于 numpy.median() 在使用 numpy.ma.masked_array() 创建的掩码数组上的行为的问题。

正如我从调试自己的代码中了解到的那样,numpy.median() 在掩码数组上无法按预期工作(有关问题的定义,请参阅在掩码数组上使用 numpy.median

提供的答案是:

说明:如果我没记错的话,np.median 不支持子类,因此它无法在 np.ma.MaskedArray 上正常工作。

因此得出的结论是,为了计算掩码数组中元素的中位数,可以使用它,numpy.ma.median()因为这是专用于掩码数组的中位数函数。

我的问题在于我刚刚花了相当多的时间来寻找这个问题,因为没有办法知道这个问题。

尝试通过 numpy.median() 计算掩码数组的中位数时不会引发警告或异常。

这个函数返回的答案不是预期的,当人们不知道这一点时会导致严重的问题。

有谁知道这是否可能被认为是一个错误?

在我看来,预期的行为应该是在掩码数组上使用 numpy.median 会引发某种异常。

有什么想法吗???

下面的测试脚本显示了在掩码数组上使用 numpy.median 的不良和意外行为(请注意,有效元素的正确和预期中值是 2.5 !!!)

0 投票
1 回答
77 浏览

python - 用布尔 ndarray 屏蔽 ndarray 以替换 nans

我正在尝试使用布尔掩码来处理 numpy 数组中的行:

isnan 和 X 是dtype.

首先,我检查年龄列中的哪些行是 nan。然后我想将这些值设置为所有年龄段的平均值。调试器有以下结果self.X[isnan, AGE_COLUMN]

self.X[[True, False, True], AGE_COLUMN]例如,如果我尝试它会返回索引行。但是对于isnan数组它不起作用。

我该如何解决这个问题以将 nans 设置为平均值。

0 投票
2 回答
6112 浏览

python - np.where 和掩码数组

感谢我在stackoverflow上获得的一些帮助,我正在使用掩码数组,但是我在对掩码数组进行np.where评估时遇到了问题。

我的蒙面数组是:

并像这样打印:

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

会返回:

然而,尽管面具(或因为?),我反而得到

使用掩码的全部目的是避免访问“空白”的索引,所以我怎样才能使用 where (或其他函数)来仅检索未掩码并匹配我的布尔标准的索引。

0 投票
3 回答
9320 浏览

python - 如何在 numpy 中更改掩码数组的值?

在我的代码中,有时我尝试修改掩码数组的值,但 python 似乎忽略了这一点。我认为这与内存存储在数组中的方式有​​关,就好像我正在修改值的副本而不是值本身一样,但我对此不够精通,无法知道如何解决它。

这是我正在尝试做的简化版本:

这个的输出是:

什么时候应该是 10。

任何帮助将不胜感激,理想情况下,这需要是可扩展的(这意味着我不一定知道 x 的形状,或者值是非负的,或者我需要修改哪个)。

我在 Ubuntu 16.04.2 上的 python 2.7.12 上使用 numpy 1.11.0

谢谢 !

0 投票
1 回答
143 浏览

python - numpy masked_array 掩码更改类型

如果值不在数组中,而是在标量中,np.ma.masked_equal或者不会创建 False 掩码,我对此感到有些惊讶。masked_values

例子 :

产生一个掩码数组,掩码是一个包含 10 个 False 值的数组,而

产生一个掩码数组,掩码设置为标量 False。结果,鉴于在我的代码中我事先不知道掩码是否与数组中的任何条目匹配,我不得不明确检查:

这对我来说似乎是一种过度劳累。这种行为的原因是什么,有没有办法避免它?

0 投票
1 回答
958 浏览

python - 使用 numpy 掩码数组有效地使用内存

我有一个大的 ndarray X(大致为 (1e3, 1e3, 1e3)),我想在其中进行X包含和不包含第 0 轴的特定元素(对于第 1 轴和第 2 轴的每个元素)的操作。即有 (1e3, 1e3) 元素,我想(有时)屏蔽或屏蔽。

最简单的做法是构造一个掩码数组,例如,

但这仅为掩码数组使用了额外的千兆字节内存。有没有办法在不构造第二个10^9掩码元素数组的情况下做到这一点?例如,是否可以为掩码构造一个稀疏矩阵?

0 投票
2 回答
7821 浏览

python - 在 Numpys Masked 数组中获取非掩码值

我正在尝试从 netCDF4 文件中提取数据。这些包含“MaskedArrays”,它们是 Numpy 库的一部分。

我的数据包含:latitudelongitudedayvalues(分隔在不同的文件中)。另外还有一个掩码,它显示哪些纬度/经度由于各种原因(没有测量或其他原因)无效。

我的数据如下所示(对于屏蔽数据):

我正在寻找一种 numpy 方法(或类似方法),它只能提取这些未屏蔽的值。理想情况下,只需从数据集中删除所有无效条目。我找到.compressed了,但它返回了一个一维数组。从第 3 维来看,这是一个相当大的信息损失,因为我不知道这些值在哪里。

另外我试过了nonzero = the_array['one of the values'][0].nonzero()。这给了我一个带有纬度/经度值的双数组,但在那之后我仍然必须访问这些 - 这很慢。不幸的是,在知道如何访问所有这些日期之后,我需要在 30*6 个文件上执行此操作,每个文件都有 ~1500×700×365 个数据点:D。

0 投票
0 回答
59 浏览

python - 如何从 3 个蒙版阵列中创建 2d 图像阵列?

所以我试图从已保存为二维数组的图像的平均像素值中创建一个图像。对于深色框架,这相当容易,我只需要创建一个运行平均值。曝光时间有点复杂,因为我必须使用 RGB 蒙版来分离图像。我无法将这些蒙版组合回连贯的图像。这是创建平均值数组的代码:

np.concatenate不起作用,因为数组的形状是 (7392, 3280) 而不是原始图像大小:(2464, 3280)。zip没有用,因为它返回一个 zip 对象,我必须在之后绘制它。

编辑:

为澄清起见,掩码数组与原始数组的形状相同,用空白值(--,在 dtype 上不确定)代替颜色不正确的像素中的实际数字。我需要做的是弄清楚如何将它们连接在一起,同时用其他掩码数组中的值替换空值以创建实际的 RGGB 图像。

0 投票
2 回答
553 浏览

python - 如果该值在另一个列表中被屏蔽,则从列表中删除元素

我已经导入了具有递增整数的 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.

我认为我的伪代码应该类似于:

但是我无法协调两个数组的不同长度和不匹配的索引,

谢谢你的帮助!

0 投票
1 回答
1197 浏览

python - 对 numpy 掩码数组的操作给出了掩码的无效值

关于 numpy 数组的 numpy 操作中的掩码数组的文档中:

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

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

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

masked_array在计算出的无效值(那些“固定”的值fix_invalid,如 np.nan 和 np.inf)没有变成(并与)掩码值合并的情况下,有什么好的解决方案?

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


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

此外,如果有人对 numpy 中缺失值的进展有任何了解,请分享,因为最早的帖子是 2011-2012 年的,当时的争论从未产生任何结果。


编辑:2017-10-30

添加到 hpaulj 的答案;具有修改域的日志函数的定义对 numpy 命名空间中的日志行为有副作用。

np.log现在具有与 相同的行为mylog,但未np.ma.log更改:

有没有办法避免这种情况?

使用Python 3.6.2 :: Anaconda custom (64-bit)和 numpy1.12.1