あなたはshape
(ないlen
)numpy
としてこれをタグ付けし、説明してきました。これは、あなたが気が散った配列を持っていると思うようになります。
In [665]: x=np.random.rand(10)
In [666]: x
Out[666]:
array([ 0.6708692 , 0.2856505 , 0.19186508, 0.59411697, 0.1188686 ,
0.54921919, 0.77402055, 0.12569494, 0.08807101, 0.11623299])
In [667]: x>.5
Out[667]: array([ True, False, False, True, False, True, True, False, False, False], dtype=bool)
In [668]: list(x).index(.6708692)
ValueError: 0.6708692 is not in list
ValueError
の理由は、あなたがフロートを探している、そしてそれらは多くの場合、正確に一致していないということです。配列がintの場合、そのようなインデックスが機能します。
In [669]: list(np.arange(10)).index(5)
Out[669]: 5
この推論は、x
が配列であってもリストであっても適用されます。
numpy
アレイ
In [670]: np.where(x>.5)
Out[670]: (array([0, 3, 5, 6], dtype=int32),)
x>.5
にブール真値のインデックスを返すwhere
が上記のようにブール配列であり、これが真である[0,3,5,6]
インデックス値有します。
In [671]: x[np.where(x>.5)]
Out[671]: array([ 0.6708692 , 0.59411697, 0.54921919, 0.77402055])
平等のテストがフロートのために任意のより良い
In [672]: x[np.where(x==0.6708692)]
Out[672]: array([], dtype=float64)
動作しないclose
の概念があります - の違いは、いくつかの許容範囲内である(np.allclose
は特に便利です):
In [679]: np.where(np.isclose(x,0.59411697))
Out[679]: (array([3], dtype=int32),)
リストの場合、列挙型ソリューションの1つは優れており、1次元配列でも機能します。しかし、それは既に配列ですので、where
を使用してください。