结构化数组的掩码是否应该自行结构化?

2024-04-26

我正在调查numpy 问题 2972 https://github.com/numpy/numpy/issues/2972以及几个相关的问题。事实证明,所有这些问题都与数组本身是结构化的情况有关,但它的掩码不是:

In [38]: R = numpy.zeros(10, dtype=[("A", "<f2"), ("B", "<f4")])

In [39]: Rm = numpy.ma.masked_where(R["A"]<5, R)

In [41]: Rm.dtype
Out[41]: dtype([('A', '<f2'), ('B', '<f4')])

In [42]: Rm.mask.dtype
Out[42]: dtype('bool')

# Now, both `__getitem__` and `__repr__` will result in errors — see issue #2972

如果我以不同的方式创建掩码数组,则掩码数据类型的结构类似于数组本身的数据类型:

In [44]: Q.dtype
Out[44]: dtype([('A', '<f4'), ('B', '<f4')])

In [45]: Q.mask.dtype
Out[45]: dtype([('A', '?'), ('B', '?')])

前一种情况暴露出几个问题。例如,Rm.__repr__() and Rm["A"]两者都导致IndexError,虽然这是一个ValueError在过去。

根据设计,该模式应该是可能的,其中A.dtype是结构化的,但是A.mask.dtype是不是结构化?

换句话说:是错误__repr__ and __getitem__中的方法numpy.ma.core.MaskedArray,或者真正的错误是否发生在之前——通过允许这样一个掩码结构化数组存在?


第一种情况中的错误表明这些方法期望掩码具有与基本数组相同的字段数量(和名称)

__getitem__:  dout._mask = _mask[indx]
_recursive_printoption: (curdata, curmask) = (result[name], mask[name])

如果掩码数组是使用“main”构造函数创建的,则掩码具有相同的结构

Rn = np.ma.masked_array(R, mask=R['A']>5)
Rn.mask.dtype: dtype([('A', '?'), ('B', '?')])

换句话说,每个元素的每个字段都有一个掩码值。

The masked_array医生显然打算将“相同形状”包括在内dtype结构。Mask: Must be convertible to an array of booleans with the same shape as 'data'.

如果我尝试以相同的方式设置蒙版masked_where does

Rn._mask=R['A']>5

我得到同样的打印错误。结构化掩码被新的布尔值覆盖,从而更改其数据类型。相反,如果我使用

Rn.mask=R['A']<5

Rn打印效果很好。.mask是一个属性,其set方法显然可以正确处理结构化掩模。

如果不深入研究代码历史(在 github 上),我的猜测是masked_where是一个便利函数,当结构数据类型添加到结构的其他部分时,该函数不会更新ma代码。相比ma.masked_array这是一个简单的函数,根本不考虑数据类型。其他便利功能,例如ma.masked_greater use masked_where。改变result._mask = cond to result.mask = cond可能是纠正此问题所需的全部内容。


您对非结构化掩模的后果进行了多彻底的测试?

Rm.flatten()

返回一个带有结构化掩码的数组,即使它以非结构化掩码开头。那是因为它使用Rm.__setmask__,对字段敏感。这就是set函数为mask财产。

Rm.tolist()  # same error as str()

masked_where以。。开始:

cond = make_mask(condition)

make_mask返回简单的“bool”数据类型。也可以使用 dtype 调用它,生成结构化掩码:np.ma.make_mask(R['A']<5,dtype=R.dtype)。但这种结构化掩模在使用时会变平masked_where. masked_where不仅允许非结构化掩码,而且还强制其非结构化。

您的非结构化掩码已经部分实现,recordmask财产:

recordmask = property(fget=_get_recordmask)

我说部分是因为它有一个get方法,但是set方法尚未实现。看def _set_recordmask(self):

我越看这个就越确信masked_where是错的。它可以更改为设置结构化掩码,但它与masked_array。如果在构造数组时引发错误(有dtype.names)。那样masked_where对于非结构化数值数组仍然有用,同时防止误用到结构化数组。

我还应该看看测试代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构化数组的掩码是否应该自行结构化? 的相关文章

随机推荐

  • 如何用Java处理来自客户端的Websocket消息?

    我正在使用 Websocket 用 Ja va 开发客户端 服务器应用程序 目前 所有客户端消息均使用 switch case 进行处理 如下所示 OnMessage public String onMessage String unscr
  • 如何使用 github actions OIDC 功能在 github actions 中使用无服务器框架

    我已经关注了这个问题如何在不使用密钥的情况下将 GitHub 操作与 AWS 部署连接起来 https stackoverflow com questions 69243571 how can i connect github action
  • Clojure 函数 - 返回最后一条语句之前计算的值

    我有一些用 Clojure 编写的测试 这是一个简单的例子 defn test1 start server run pvt and expect PVT 0 stop server 我想返回 run pvt and expect 的结果 但
  • 使用bulk_insert_mappings

    我正在尝试批量插入以下形式的大量字典列表 results attribute u SEX value d 0 0 value s u M sid 1L attribute u SEX value d 0 0 value s u M sid
  • PlantUML 和 Graphviz 插件设置 PHPstorm

    我已经设置好了PlantUML插件PhpStorm 我已经下载了图形可视化 2 36并安装在我的机器上 我已经搜索过如何设置Graphviz为了使用PlantUML做一个UseCase in PhpStorm 但我找不到任何信息 我不太清楚
  • 如何通过VBA获取当前Excel实例的进程ID,而不使用标题?

    如何获取运行 VBA 代码的当前 Excel 实例的进程 ID 我不想通过标题中的名称来请求它 当我有两个或多个具有相同标题的 Excel 实例时 这会导致问题 您可以使用此方法来获取当前进程ID Declare Function GetC
  • 关闭 genymotion 模拟器的正确方法是什么?

    有趣的是 我总是通过关闭模拟器的窗口 右上角的 X 是的 来关闭它 现在 如果在此期间模拟器中没有任何内容损坏 我会以某种方式感兴趣 令人惊讶的是 谷歌搜索不到任何关于这一点的信息 我有同样的问题 Windows 8 1 GenyMotio
  • 从黑莓中的url获取数据

    我有一个文件的网址 http www example com 123 aes 它包含超过2MB的mp3文件的数据 现在我想从这个网址获取数据 当我尝试 http 连接来获取数据时 它显示错误 请求的实体太大 如何解决这个问题呢 我的代码如下
  • 使用python在scattermapbox中围绕点绘制多边形

    我在用散点图箱 https plotly com python scattermapbox 在地图上绘制点 我想画出覆盖的多边形 x milePOI 的半径 dcc Graph id map graph application callba
  • Go 中带有 TTL 选项的映射

    我需要构建这样的数据结构 map string SomeType 但它必须将值存储大约 10 分钟 然后从内存中清除 第二个条件是记录数量 它必须是巨大的 该数据结构必须至少添加每秒 2 5K 条记录 那么 Go 中最正确的实现方法是什么
  • HTML 5 视频拉伸

    您能让视频 拉伸 到视频元素的宽度和高度吗 显然 默认情况下 视频会按比例缩放并适合视频元素 thanks 我已经使用 object fit fill in CSS 进行了测试 效果很好 video object fit fill 来自 M
  • 泽西岛 java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

    我正在尝试使用 jersey 库使用 Tomcat 和 Eclipse 制作一个 Web 服务 这是我的服务类别 package com gontuseries university import javax ws rs core Medi
  • 如何在 symfony 5 中将所有 Http 异常格式化为 json?

    在 symfony5 控制器中 我可以通过以下方式返回 json 响应 return this gt json key gt content 然而 当我抛出 HttpException 时 我会在开发和生产中看到默认的 html 错误页面
  • 存储过程执行需要时间

    我在 SQL Server 中面临一个非常奇怪的问题 我有一个存储过程 并且我正在从 C 代码执行该过程 该过程将返回一个数据表 数据集 我的问题是 C 代码 ADO NET 代码的执行过程花费了太多时间 大约 2 分钟 但是当我从 SQL
  • 在数据库中存储非常大的文件

    在数据库中存储大文件 大约 100 GB 是个好主意吗 目前我们考虑使用NBT格式或使用mysql postgresql数据库将数据保存在文件夹中 数据库旨在对大量小数据进行排序 过滤和执行计算 如果您只想拥有一个文件系统 例如 对聚合按上
  • 单击 CheckBox 中的 ClickableSpan 会更改其状态

    我的复选框中有一个 ImageSpan 和 ClickableSpan 用于在复选框文本末尾显示图标并处理单击它 但是单击它会更改复选框的选中状态 这是不需要的 当用户单击 ClickableSpan 时 如何防止更改复选框状态 只是我需要
  • pdfptable的不可见边框

    我正在使用 iText 库在 Java 中生成 pdf 文件 我正在 pdfptable 中写入数据 如何使表格边框不可见 PdfPTable 的边框元素由添加到表中的 PdfPCell 定义 每个单元格都有自己的样式 格式 这是 API
  • 如何使用yarn工作空间从monorepo中的nodejs项目构建docker镜像

    我们目前正在与我们的团队一起研究网站的 CI CD 我们最近还适应了 monorepo 结构 因为这使我们的依赖关系和概述变得更加容易 目前测试等已为 CI 做好准备 但我现在正在部署 我想创建所需包的 docker 镜像 我考虑过的事情
  • Xcode 4.5 背景图像 iPhone 4、4s、5

    我在 viewController m 中编写了后台代码 self view backgroundColor UIColor colorWithPatternImage UIImage imageNamed image png 我有不同图片
  • 结构化数组的掩码是否应该自行结构化?

    我正在调查numpy 问题 2972 https github com numpy numpy issues 2972以及几个相关的问题 事实证明 所有这些问题都与数组本身是结构化的情况有关 但它的掩码不是 In 38 R numpy ze