ホームページ >バックエンド開発 >Python チュートリアル >ndarray配列をnumpyに実装して、特定の条件を満たすインデックスメソッドを返す
次の記事は、特定の条件を満たすインデックスメソッドを返すために ndarray 配列を実装する記事を numpy で共有します。良い参考値となっており、皆様のお役に立てれば幸いです。一緒に見てみましょう
numpyのndarray型では、特定のインデックスを直接返す方法はないようですが、where関数しか見つけられませんでしたが、特定の値に対応するインデックスを見つけるにはwhere関数がとても便利です。 、そして特定の範囲を返すための値のインデックス付けは、少なくとも私にとってはそれを行う方法を理解するのにあまり効率的ではありません。まずはwhere関数の使い方について説明します。
(1) where 関数の使用シナリオ:
たとえば、今、配列を生成します:
import numpy as np arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2])
ここで、arr は 18 個の要素を含む ndarray 型の配列であり、その配列を使用します後でそれを何かと呼びましょう。値 3 を持つ配列内のすべての要素に対応するインデックス位置を返したい場合、これは where 関数を使用して簡単に実現できます。
print np.where(arr==3)
以下に示すように、値 3 に対応するすべてのインデックス位置を含むタプルが返されます:
インデックス 5、9、および 14 に対応する要素の値が表示されます。 3.このようにして、簡単に目標を達成できます。ただし、これは、一定範囲の変更内のインデックスでは機能しません。以下の方法は私が考えた妥協案です。比較的愚かですが、マスターはそれをクリアできます。
(2) 補助配列を使用して、特定の範囲内の値インデックスの検索を解決します
要素インデックスを識別する配列を構築し、それを使用して、条件を満たす要素に対応するインデックスを表示します状況、契約条項。 3から100までの要素値のインデックスを返したい場合は、先ほどの配列のままです。 arr と同じサイズの配列を生成し、まずそれを 1 回フィルタリングして 3 より大きい要素のインデックスに対応する配列を見つけ、次に再度フィルタリングして、最終的に目的の結果を得ることができます。コードは次のとおりです:
b=np.arange(len(arr))#生成和arr相同长度的数组
c=b[arr>3]#c存放的就是arr中大于3的元素对应的索引 #最后通过遍历c数组,选择3到100之间的值打印出来 for i in range(len(c)): if arr[c[i]]<100: print c[i],
実行効果を見てみましょう:
プログラムがすべてに対応するインデックス値をマークしていることがわかります。 3から100までの要素が出てきます。インデックス値と対応する要素を同時に取得したい場合は、上記の「print c[i]」を「print c[i],arr[c[i]]」に置き換えるだけです】」。
もちろん、この方法は、特定の値に対応するインデックスを選択するのにも適しています。たとえば、3 つすべてに対応する位置を見つけたい場合は、 print b[arr==3] を使用して出力できます。値 3 を持つすべての要素に対応する位置。インデックスの。実際、どのように行うかに関係なく、配列を使用して関係演算を実行してブール配列を生成し、配列内の True である領域を表示します。
もちろん、2 回フィルターして、3 より大きい要素と 100 未満の要素に対応するインデックス配列を除外し、2 つの配列に対して交差処理を実行することもできます。numpy には、そのような操作を実行できる intersect1d 関数があります。 , しかし、それでも面倒です。現時点ではこれらの方法しか思いつきません。専門家がより良い方法を持っているかどうかはわかりません。ぜひ共有してください。
関連する推奨事項:
関連する推奨事項:
Python3 ライブラリで numpy 配列属性を表示する方法
以上がndarray配列をnumpyに実装して、特定の条件を満たすインデックスメソッドを返すの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。