web-dev-qa-db-ja.com

NumPy配列でリストにインデックスを付けるときのTypeError:整数スカラー配列のみがスカラーインデックスに変換できます

次のコード:

x = list(range(0,10))
random.shuffle(x)
ind = np.argsort(x)
x[ind]

typeError:整数スカラー配列のみがスカラーインデックスに変換できます。

私の問題は「 numpy array TypeError:整数スカラー配列のみがスカラーインデックスに変換できる 」という質問とは異なることに注意してください。これはより複雑なことを試みています。

この質問の私の間違いは、通常のpythonリストのインデックスのリストを使用しようとしていることです-私の答えを参照してください。範囲を使用するだけでなく、シャッフル。

問題は、通常のPythonリストであるxのリストを、それが派手な配列であるかのようにインデックス化しようとしていることです。修正するには、x numpy配列に:

x = list(range(0,10))
random.shuffle(x)
ind = np.argsort(x)
x = np.array(x) # This is the key line
x[ind]

(これは今私に2回起こりました。)

8
Josiah Yoder

良い答えですが、リストを派手な配列に変換できない場合(つまり、文字列のリストがある場合)は、上記のようにインデックスの配列でスライスすることはできません。最も簡単な代替策は

[x[i] for i in ind]

0
Jacob Stern