1. ホーム
  2. python

[解決済み】Numpy: 2次元配列からランダムな行のセットを取得する

2022-04-13 02:59:03

質問

次のような非常に大きな2次元配列があります。

a=
[[a1, b1, c1],
 [a2, b2, c2],
 ...,
 [an, bn, cn]]

numpyを使用して、例えば初期配列からランダムな2行を含む新しい2次元配列を取得する簡単な方法はありますか? a (置換なし)ですか?

b=
[[a4,  b4,  c4],
 [a99, b99, c99]]

解決方法は?

>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
       [3, 2, 0],
       [0, 2, 1],
       [1, 1, 4],
       [3, 2, 2],
       [0, 1, 0],
       [1, 3, 1],
       [0, 4, 1],
       [2, 4, 2],
       [3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
       [1, 3, 1]])

一般的なケースを想定してまとめる。

A[np.random.randint(A.shape[0], size=2), :]

非置換用(numpy 1.7.0+)です。

A[np.random.choice(A.shape[0], 2, replace=False), :]

1.7より前のバージョンでは、置換なしのランダムリストを生成する良い方法があるとは思えません。おそらく、2つの値が同じでないことを保証する小さな定義を設定することができます。