【问题标题】:Changing values of indexes by magnitude按幅度更改索引值
【发布时间】:2016-09-04 01:04:27
【问题描述】:

我正在尝试制作一个灵活的算法,如果它们太高,它将从 50 x 50 数组(其中包含来自拟合图像的像素值)中取出值。 它们太高了(在 python 中)。我尝试做的第一件事是:

file = pf.open('/Users/Vofun/desktop/file.fits')
data = np.array(file[0].data)
for pixellist in range (len(data)):
        if data[pixellist] > 50:
           data[pixellist] = 10:

当然,那没用,我得到了

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

问题是,如果我这样做,如果我使用 a.any(),我不知道如何告诉它要替换哪个值。到目前为止,我认为我需要的是:

if a.any(data) > 50:

然后一行代码告诉它用 10 替换该值,但我不确定如何告诉它为找到的像素执行此操作,因为我在编码方面有点糟糕。如果索引的值超过 50,我将如何减少索引的值?

【问题讨论】:

  • datashape 是什么?
  • 我知道我应该把它包括在内。这是 50 乘 50
  • 我不明白 sec_data 是不是也是 50 x 50?
  • 哎呀...我将其中的一半名称更改为通用名称,而将另一半名称保留为原始名称。

标签: python python-2.7 numpy multidimensional-array


【解决方案1】:

您可以使用boolean indexing 更改您的数据。

import numpy as np
a = np.random.random_integers(40, 60, (5,5))

>>> a
array([[58, 58, 43, 56, 54],
       [59, 40, 42, 52, 45],
       [50, 60, 43, 48, 52],
       [55, 48, 57, 41, 47],
       [57, 55, 43, 54, 42]])
>>>
>>> a > 50
array([[ True,  True, False,  True,  True],
       [ True, False, False,  True, False],
       [False,  True, False, False,  True],
       [ True, False,  True, False, False],
       [ True,  True, False,  True, False]], dtype=bool)
>>>
>>> a[a > 50] = 0
>>> a
array([[42,  0,  0,  0, 48],
       [ 0, 46,  0,  0, 49],
       [50,  0,  0, 44, 43],
       [46, 46,  0, 43, 49],
       [ 0,  0,  0,  0, 48]])
>>> 

【讨论】:

  • 好的,所以如果我去 'data[data > 50] = 0' 它会将值 0 分配给数据中值大于 50 的所有索引。但是前两个数组必须做什么做第三个?第三个是唯一一个似乎真正做任何事情的人。为什么要使用布尔值?第三个数组与布尔值无关...
  • @Vofun,我真的不明白你在评论中问什么 - 你读过布尔索引的链接吗?在我的回答中,我首先展示了正在操作的数组,然后展示了对该数组进行比较表达式的结果,以便您可以看到它创建了一个相同形状的布尔数组,然后展示了如何使用布尔索引。
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多