【问题标题】:Values being altered in numpy array在 numpy 数组中更改的值
【发布时间】:2017-01-26 19:31:02
【问题描述】:

所以我有一个 2D numpy 数组 (256,256),包含 0 到 10 之间的值,它本质上是一个图像。我需要删除 0 值并将它们设置为 NaN,以便我可以使用特定库 (APLpy) 绘制数组。但是,每当我尝试更改所有 0 值时,其他一些值都会被更改,在某些情况下会更改为原始值的 100 倍(不知道为什么)。

我使用的代码是:

for index, value in np.ndenumerate(tex_data):
    if value == 0:
        tex_data[index] = 'NaN'

其中 tex_data 是我需要从中删除零的数据数组。不幸的是,我不能只对不需要的值使用掩码,因为据我所知,APLpy 不会,除了掩码数组。

无论如何我可以将 0 值设置为 NaN 而无需更改数组中的其他值吗?

【问题讨论】:

  • 你确定这是基于你的 for 循环吗?我自己试过了,没有观察到这种效果
  • 是的,我真的不知道发生了什么
  • 你能提供一些示例代码和数据吗?如果我们不能复制,那我们就帮不上忙了O_O
  • 这个数组的dtype 是什么?如果它是一个小的 int,尝试向其写入 NaN 字符串或浮点 np.nan 可能会产生问题(如果它运行的话)。

标签: python arrays numpy enumerate


【解决方案1】:

使用花式索引。像这样:

tex_data[tex_data==0] = np.nan

我不知道您的原始代码为何失败。它看起来对我来说是正确的,尽管效率非常低。

【讨论】:

  • 注意:ndenumerate 进行元素迭代。索引将是一个 2D 索引,值将是该索引元素。
  • 支持精美的索引。 numpy 的口头禅是:尽可能避免 for 循环!
  • 试过了还是一样的问题?
  • 那么您必须提供足够的代码和/或数据来重现问题。
【解决方案2】:

使用浮动规则,

tex_data/tex_data*tex_data

也在这里工作。

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-05-11
    相关资源
    最近更新 更多