1. ホーム
  2. python

[解決済み] TypeError: 1次元のnumpyインデックス配列でスカラーインデックスに変換できるのは整数のスカラー配列だけです。

2022-03-01 10:11:39

質問

を元に、学習セットからランダムに要素をピックアップする関数を書きたい。 ビン確率 を提供します。I 集合のインデックスを11ビンに分割する を作成し、次に カスタム確率 を使用します。

bin_probs = [0.5, 0.3, 0.15, 0.04, 0.0025, 0.0025, 0.001, 0.001, 0.001, 0.001, 0.001]

X_train = list(range(2000000))

train_probs = bin_probs * int(len(X_train) / len(bin_probs)) # extend probabilities across bin elements
train_probs.extend([0.001]*(len(X_train) - len(train_probs))) # a small fix to match number of elements
train_probs = train_probs/np.sum(train_probs) # normalize
indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)
out_images = X_train[indices.astype(int)] # this is where I get the error

以下のようなエラーが発生します。

TypeError: only integer scalar arrays can be converted to a scalar index with 1D numpy indices array

作成したインデックスの配列はすでにチェックしているので、これはおかしいと思います。それは 1-D であれば、それは 整数 であり、それは スカラー .

何が足りないのでしょうか?

注:私は indicesastype(int) . 同じエラーです。

解決方法は?

おそらくエラーメッセージは多少誤解を招くかもしれませんが、要点は以下の通りです。 X_train はリストであり、numpyの配列ではありません。これに対して配列インデックスを使用することはできません。まず配列にしてください。

out_images = np.array(X_train)[indices.astype(int)]