在 python 2.7 中,我总是这样做:
img[numpy.where(img<min_flux)]=0
img[numpy.where(img>0)]+=add_flux
看到不同:
这将返回满足条件的字段的实际值:
>>> data2[data2>noise_cutoff]
array([ 0.15600586, 0.15576172, 0.16992188, ..., 0.15063477,
0.21899414, 0.15722656], dtype=float32)
这将返回条件返回的索引True
:
>>> np.where(data2>noise_cutoff)
(array([ 0, 0, 0, ..., 1488, 1488, 1488]), array([ 88, 789, 1065, ..., 1683, 1833, 1872]))
您想将索引处的值设置为 nan 或零,我不知道第一个是如何解释的,但根据经验,我知道它不起作用。
编辑
我对处理 nan 值的 FITS 查看器也有不好的体验。通常人们会写一个适合字段,即RANGE
应该描述所有可能的值。我经常看到[0, 65535]
,但这主要是一种协议和数据类型(毕竟它是 FITS 格式)。
我也对发送索引和值之间的差异感到好奇,这就是我所做的:
首先显示一些默认值:
>>> data
array([[ 0.01800537, 0.00421143, -0.01644897, ..., -0.03686523,
0.05981445, -0.00924683],
[-0.00267029, -0.02334595, 0.03179932, ..., 0.09436035,
0.05981445, 0.00457001],
[-0.13354492, -0.0302124 , -0.00266266, ..., 0.05291748,
-0.06445312, 0.09436035],
...,
[ 0.04669189, -0.02218628, -0.06347656, ..., -0.01507568,
0.10229492, 0.02636719],
[ 0.00536346, -0.00842285, 0.04669189, ..., -0.00816345,
0.00565338, -0.02886963],
[-0.07043457, -0.00840759, -0.09106445, ..., 0.06787109,
-0.11865234, -0.05645752]], dtype=float32)
我制作了一个副本以不编辑我需要的原始文件,然后我采取行动data2[data2>noise_cutoff]
并将np.where(data2>noise_cutoff)
结果复制到[ ]
运算符中,并进行了一些编辑,因此它是一个有效的表达式。
>>> data2 = data.copy
# result of data2[data2>noise_cutoff]
>>> data2[[0.21899414, 0.15722656]]
array([[ 0.01800537, 0.00421143, -0.01644897, ..., -0.03686523,
0.05981445, -0.00924683],
[ 0.01800537, 0.00421143, -0.01644897, ..., -0.03686523,
0.05981445, -0.00924683]], dtype=float32)
#result of np.where(data2>noise_cutoff)
>>> data2[[0,0, 0, 1488, 1488, 1488], [88,789,1065,1683,1833,1872]]
array([ 0.15600586, 0.15576172, 0.16992188, 0.15063477, 0.21899414,
0.15722656], dtype=float32)
所以看起来 numpy 喜欢将发送到的参数解包[ ]
。例如,发送data2[[1, 2]]
将返回第一行和第二行data2
。由于我已经发送了浮点值0.21899414
,并且0.15722656
它们显然被转换为int
s,因此向下舍入到0
,并且第一行返回了两次。
然而,发送 a 会data2[[1],[1]]
返回一个浮点数data[1,1]
。为这两个发送一个列表会返回一系列写在这些索引处的值,即:data2[[1,2], [1,2]]
获取元素[1,1]
,[2,2]
>>> data2[1,1] == data2[[1],[1]]
array([ True], dtype=bool)