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 ビューアーについても悪い経験があります。通常、人々は fit フィールドを書きます。つまり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]]
すると の 1 行目と 2 行目が返されdata2
ます。float 値を送信したので0.21899414
、0.15722656
それらは明らかに s としてキャストされint
、切り捨てられて0
になり、最初の行が 2 回返されました。
ただし、a を送信するとdata2[[1],[1]]
、float at が返されdata[1,1]
ます。これらの両方のリストを送信すると、これらのインデックスに書き込まれた一連の値が返されdata2[[1,2], [1,2]]
ます[1,1]
。[2,2]
>>> data2[1,1] == data2[[1],[1]]
array([ True], dtype=bool)