NumPy 上級インデックス
NumPy は、一般的な Python シーケンスよりも多くのインデックス方法を提供します。
これまで見てきた整数とスライスによるインデックスに加えて、配列は整数配列インデックス、ブールインデックス、ファンシーインデックスによってインデックス指定できます。
NumPy における上級インデックスとは、整数配列、ブール配列、またはその他のシーケンスを使用して配列の要素にアクセスすることを指します。基本インデックスと比較して、上級インデックスは配列内の任意の要素にアクセスでき、配列に対して複雑な操作や変更を行うために使用できます。
整数配列インデックス
整数配列インデックスとは、ある配列を使用して別の配列の要素にアクセスすることです。この配列の各要素は、ターゲット配列の特定の次元におけるインデックス値です。
次の例では、配列内の(0,0),(1,1)と(2,0)位置にある要素を取得します。
例
出力結果は次のとおりです:
[1 4 5]
次の例では、4X3 配列の四隅の要素を取得します。行インデックスは [0,0] と [3,3]、列インデックスは [0,2] と [0,2] です。
例
出力結果は次のとおりです:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 这个数组的四个角元素是: [[ 0 2] [ 9 11]]
返される結果は、各隅の要素を含む ndarray オブジェクトです。
スライスを利用して: 或 …インデックス配列と組み合わせることができます。次の例のとおりです:
例
出力結果は次のとおりです:
[[5 6] [8 9]] [[5 6] [8 9]] [[2 3] [5 6] [8 9]]
ブールインデックス
ブール配列を使用してターゲット配列をインデックスできます。
ブールインデックスは、ブール演算(比較演算子など)を使用して、指定された条件を満たす要素の配列を取得します。
次の例では、5より大きい要素を取得します:
例
出力結果は次のとおりです:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 大于 5 的元素是: [ 6 7 8 9 10 11]
次の例では、~(補数演算子)を使用して NaN をフィルタリングします。
例
出力結果は次のとおりです:
[ 1. 2. 3. 4. 5.]
次の例では、配列から複素数でない要素をフィルタリングする方法を示します。
例
出力は次のとおりです:
[2.0+6.j 3.5+5.j]
ファンシーインデックス
ファンシーインデックスとは、整数配列を使用したインデックスを指します。
ファンシーインデックスは、インデックス配列の値をターゲット配列の特定の軸の添え字として使用して値を取得します。
1次元整数配列をインデックスとして使用する場合、ターゲットが1次元配列であれば、インデックスの結果は対応する位置の要素です。ターゲットが2次元配列であれば、対応する添え字の行になります。
ファンシーインデックスはスライスとは異なり、常にデータを新しい配列にコピーします。
1次元配列
1次元配列には軸が1つしかないためaxis = 0、1次元配列はaxis = 0この軸上で値を取得します:
例
x = np.arange(9)
print(x)
# 1次元配列で指定された添え字に対応する要素を読み取る
print("-------添え字に対応する要素を読み取る-------")
x2 = x[[0, 6]] # ファンシーインデックスを使用
print(x2)
print(x2[0])
print(x2[1])
出力結果は次のとおりです:
[0 1 2 3 4 5 6 7 8] -------读取下标对应的元素------- [0 6] 0 6
2次元配列
1、順方向のインデックス配列を渡す
例
print (x[[4,2,1,7]])出力されるのは、添え字4, 2, 1, 7に対応する行で、出力結果は次のとおりです:
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]] -------读取下标对应的行------- [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]]
2、逆方向のインデックス配列を渡す
例
出力結果は次のとおりです:
[[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]]
3、複数のインデックス配列を渡す(np.ix_ を使用する必要があります)
np.ix_ 関数は、2つの配列を入力として受け取り、デカルト積のマッピング関係を生成します。
デカルト積とは、数学において、2つの集合 X と Y のデカルト積(Cartesian product)のことで、直積とも呼ばれ、次のように表されます:X×Y最初の対象が X のメンバーであり、2番目の対象が Y のメンバーであるすべての可能な順序対のうちの1つです。
例えばA={a,b}, B={0,1,2}、の場合、次のようになります:
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
例
出力結果は次のとおりです:
[[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]その他の拡張