2016-12-28 5 views
1

ここではシナリオですnumpy配列で値のインデックスを抽出するにはどうすればよいですか?私は、次の変数を持って</p> <p>:

val = [('am', '<f8'), ('fr', '<f8')] # val is type numpy.recarray  

am = [12.33, 1.22, 5.43, 15.23] # am is type numpy.ndarray 

fr = [0.11, 1.23, 2.01, 1.01] # fr is type numpy.ndarray 

私は午前= 12.33のための指標を検出することである必要があるとインデックスがあり、この場合には(一度抽出= 15.23を、午前何[ 0]と[3])、私は新しい変数を作成する必要があります:

new_am = [12.33, 15.23] 

new_fr = [0.11, 1.01] 

私の質問はどのようにインデックスを抽出するのですか?

私はすでに .INDEX np.whereを使用しているが、私は .INDEX --->「はAttributeErrorのエラーメッセージ受信してから、問題を抱えているようだ: 'numpy.ndarray'オブジェクトを無属性 .INDEXを持っていない」と np.whereのために戻ってインデックスが何も--->である "任意のアイデアのための配列([]、DTYPE = int64型)"

ありがとう!

+0

インデックスを 'np.array([0、3])'としたいのですが? 'np.where(am == 12.33)[0]'はあなたに必要なものを与えてくれませんか? – Psidom

+0

これを修正すると、上に示した "new_am"と "new_fr"が生成されます。 – FMEZA

+0

no ... 'np.where(am == 12.33)[0]'空の配列を返します – FMEZA

答えて

1

あなたは要素が別の配列であるかどうかを示すために、ブールの配列を返すnp.in1dをしたいことがあります。

import numpy as np 
am = np.array([12.33, 1.22, 5.43, 15.23]) 
fr = np.array([0.11, 1.23, 2.01, 1.01]) 

index = np.where(np.in1d(am, [12.33, 15.23]))[0] 
index 
# array([0, 3]) 

am[index] 
# array([ 12.33, 15.23]) 

fr[index] 
# array([ 0.11, 1.01]) 

それとも属性を持つ配列を持っている:

new_arr = np.array(zip(am, fr), dtype=val) 

index = np.where(np.in1d(new_arr['am'], [12.33, 15.23]))[0] 

new_am = new_arr[index]['am'] 
new_fr = new_arr[index]['fr'] 

new_am 
# array([ 12.33, 15.23]) 

new_fr 
# array([ 0.11, 1.01]) 
+0

ありがとう!興味深い....私があなたに与えた価値についてはうまくいくように思えますが、私の実際の値はそうではありません...上記の例の値と全く同じ特徴を持っています: '' params ['ampl'] ---> index = np.where(np.in1d(params ['ampl']、[3931.41287385]))---> array([3931.41287385、412.51629703、257.47891338、...、193.89134605、192.66807322、192.20132863] [0] ---> index ---> array([]、dtype = int64) ' – FMEZA

+0

これは浮動小数点数の不正確さに起因する可能性があります。 'params ['ampl'] [0] == 3931.41287385'でこれらが等しいかどうかを調べることができます。ここではいくつかの許容誤差を導入する必要があります。 – Psidom

+0

ありがとうございます...残念ながら、同じ動作 'index = np.where(params ['ampl'] [0] == 3931.41287385)---> index --->(配列([]、dtype = int64) – FMEZA

関連する問題