2016-05-31 3 views
2

numpy.stats.pearsonrメソッドで再生する配列に変換できるのと同じ長さのリストが2つあります。現在、これらのリストの要素の一部はnanであるため、そのメソッドには使用できません。私の場合には、これらの要素と他のリストの対応する要素を削除することが最善の方法です。それを行うための実用的かつ非凡な方法がありますか? 例:私は2つの同じ長さの配列の対応する要素を削除する

[1 2 nan 4 5 6 ][1 nan 3 nan 5 6]

を有し、最終的に、私は

[1 5 6 ]

(ここで番号

[1 5 6 ]はないの位置/指標の代表的なものである必要私が扱っている実際の数)。編集:ここでの手間のかかる部分は、nanを1つの配列に入れずに、リスト/配列を両方とも持っていて、その逆にnanに対応しています。確かに配列を操作することで行うことができますが、私はPythonの方法でそれを行うには、はっきりした、単純すぎる方法ではないと確信しています。

答えて

5

提案された複製への受け入れられた回答はあなたの半分になります。既にNumpyを使用しているので、これらをnumpy配列にする必要があります。次に、インデックス式を生成し、それを使ってこれらの2つの配列にインデックスを付ける必要があります。ここでインデックスは(Xの各要素は、yのnanまたは各要素はnanである)各要素はTrueないIFFで同じ形状のboolの新しい配列であろう。

>>> x 
array([ 1., 2., nan, 4., 5., 6.]) 
>>> y 
array([ 1., nan, 3., nan, 5., 6.]) 
>>> indices = np.logical_not(np.logical_or(np.isnan(x), np.isnan(y))) 
>>> x = x[indices] 
>>> y = y[indices] 
>>> x 
array([ 1., 5., 6.]) 
>>> y 
array([ 1., 5., 6.]) 

特に、これは、任意の2つの配列に対して機能します同じ形の

PS、あなたはオペランドの配列の要素の型が配列のためのケースがここisnanから返されて、あなたの代わりにlogical_orの代わりにlogical_not|~を使用することができ、ブール値であることがわかっている場合:indices = ~(np.isnan(x) | np.isnan(y))

+1

私は思いますnumpy: 'numpy.logical_not'と' numpy.logical_and'と 'numpy.isnan'のブール演算子を使うことをお勧めします。 – Bort

+0

明確で、簡単でよく説明されています。そして、それは動作します。ありがとう! –

+0

@Bortおそらく、しかしisnanは既にブール値を返すので、 '〜'と '|'も同様に働きます。 –

関連する問題