我试图使一个灵活的算法,将采取值50 × 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.a any()或a.a all()
的问题是,如果我这样做,我不知道如何告诉它哪个值要替换,如果我使用a.a any()。到目前为止,我认为我需要的是:
if a.any(data) > 50:
然后一行代码告诉它将值替换为10,但我不确定如何告诉它对它找到的像素这样做,因为我在编码方面有点糟糕。如果索引的值超过50,我该如何减少它们的值?
你可以使用布尔索引来改变你的数据
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]])
>>>