2017-01-26 14 views
4

私は、2Dのnumpy配列(256,256)を持ち、0から10の値を含みます。これは本質的に画像です。特定のライブラリ(APLpy)を使用して配列をプロットできるように、0の値を削除してNaNに設定する必要があります。しかし、0の値をすべて変更しようとすると、他の値のいくつかが変更され、場合によっては元の値の100倍になります(理由は分かりません)。numpy配列で値が変更されています

私が使用しているコードは:tex_data私はゼロを削除する必要があり、そこからデータアレイである

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

。残念ながら、APLpyはマスクされた配列を除いて私が知る限り、必要のない値のマスクを使用することはできません。

とにかく、配列の他の値を変更せずに0値をNaNに設定できますか?

+0

これはあなたのforループに基づいていると確信していますか?私は自分自身のために試してみたが、この効果は観察されていない – Lagerbaer

+0

うん、何が起こっているのか本当にわからない –

+0

あなたはいくつかのコードとデータを提供してくれますか?複製できない場合は、O_Oを助けることはできません – Lagerbaer

答えて

4

ファンシーインデックスを使用します。このように:

tex_data[tex_data==0] = np.nan 

元のコードが失敗した理由はわかりません。ひどく非効率的ですが、それは私には正しいと思われます。フロートルールを使用

+0

注: 'ndenumerate'は要素ごとの反復を行います。インデックスは2Dインデックスになり、値はそのインデックス要素になります。 – Lagerbaer

+0

風変わりなインデックス作成のためのUpvote。できるだけいつでもループを避けてください! – Lagerbaer

+0

これを試みても同じ問題が発生しますか? –

0

tex_data/tex_data*tex_data

もここで仕事をします。

関連する問題