Pythonでは、.index()を使用して配列内の値のインデックスを取得できます。 NumPy配列でどうすればよいですか?
しようとすると
decoding.index(i)
numPyライブラリはこの関数をサポートしていないと言っています。それを行う方法はありますか?
np.where
を使用して、特定の条件がTrue
であるインデックスを取得します。
例:
2D np.ndarray
と呼ばれるa
の場合:
i, j = np.where(a == value)
1D配列の場合:
i, = np.where(a == value)
>=
、<=
、!=
などの条件で機能します...
index()
メソッドでnp.ndarray
のサブクラスを作成することもできます。
class myarray(np.ndarray):
def __new__(cls, *args, **kwargs):
return np.array(*args, **kwargs).view(myarray)
def index(self, value):
return np.where(self == value)
テスト:
a = myarray([1,2,3,4,4,4,5,6,4,4,4])
a.index(4)
#(array([ 3, 4, 5, 8, 9, 10]),)
numpy配列をリストに変換し、そのインデックスを取得できます。
例えば
tmp = [1,2,3,4,5] #python list
a = numpy.array(tmp) #numpy array
i = list(a).index(2) # i will return index of 2, which is 1
私はあなたが欲しいものです。
NumPy配列のインデックスを実装するこれらの2つの方法の間で私は破れています。
idx = list(classes).index(var)
idx = np.where(classes == var)
どちらも同じ文字数を取りますが、最初のメソッドはnumpy.ndarray
ではなくint
を返します。
この問題は numpy_indexed ライブラリを使用して効率的に解決できます(免責事項:私はその著者です)。このタイプの問題に対処するために作成されました。 npi.indicesは、list.indexのn次元の一般化として表示できます。 (指定された軸に沿って)nd-arrayに作用します。また、一度に1つのアイテムではなく、ベクトル化された方法で複数のエントリを検索します。
a = np.random.Rand(50, 60, 70)
i = np.random.randint(0, len(a), 40)
b = a[i]
import numpy_indexed as npi
assert all(i == npi.indices(a, b))
このソリューションは、以前に投稿された回答よりも時間の複雑さ(n log nが最悪)が高く、完全にベクトル化されています。
関数numpy.nonzero()
、または配列のnonzero()
メソッドを使用できます
import numpy as np
A = np.array([[2,4],
[6,2]])
index= np.nonzero(A>1)
OR
(A>1).nonzero()
出力:
(array([0, 1]), array([1, 0]))
出力の最初の配列は行インデックスを示し、2番目の配列は対応する列インデックスを示します。
インデックスに興味がある場合、最良の選択はnp.argsort(a)です
a = np.random.randint(0, 100, 10)
sorted_idx = np.argsort(a)