我有一個非常大的二維數組,這看起來是這樣的:NumPy的:獲取隨機組行從二維數組
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
使用numpy的,有一個簡單的方法來獲得與例如一個新的二維數組來自初始數組a的2個隨機行(沒有替換)?
例如
b=
[[a4, b4, c4],
[a99, b99, c99]]
我有一個非常大的二維數組,這看起來是這樣的:NumPy的:獲取隨機組行從二維數組
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
使用numpy的,有一個簡單的方法來獲得與例如一個新的二維數組來自初始數組a的2個隨機行(沒有替換)?
例如
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之前生成隨機列表而無需替換的好方法。也許你可以設置一個小的定義來確保兩個值不一樣。
有可能不是一個好方法,但是一種和'np.random.choice'一樣好的方法,那就是'np.random.permutation(A.shape [0])[:2]',實際上它不是很好,但這就是'np.random.choice'這個時候......或者你不在意改變你的數組,'np.random.shuffle' – seberg
在numpy 1.7之前,使用[隨機](http://docs.python.org/2.7/library/random.html).sample(xrange(10),2) – denis
你爲什麼要命名變量A和B?它使閱讀變得更加困難。 – Pinocchio
這是舊的文章,但是這是最適合我:
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
變化替換=假爲真,以得到同樣的事情,但更換。
@SalvadorDali我編輯了Hezi的帖子,不選擇替換。一旦編輯被同行評審,你會看到'選擇'增加了'replace = False'參數。 – 0x24a537r9
@ 0x24a537r9你不應該這樣做。這是他的答案,你改變它。如果你想 - 添加你的答案,不要改變其他人的答案,這會顯着改變答案 –
@ 0x24a537r9你可以發佈答案而不需要更換嗎? – ocean800
另一種選擇是創建一個隨機掩碼,如果您只是想按某個因子對數據進行縮減採樣。說我想下采樣到我的原始數據集,這是目前陣列data_arr
舉行的25%:
# generate random boolean mask the length of data
# use p 0.75 for False and 0.25 for True
mask = numpy.random.choice([False, True], len(data_arr), p=[0.75, 0.25])
現在,您可以撥打data_arr[mask]
,並返回〜25%的行,隨機抽取的。
如果您需要在同一行,但就在這時,一個隨機抽樣,
import random
new_array = random.sample(old_array,x)
這裏的x,必須是一個「詮釋」定義要隨機挑選的行數。
其愚蠢有一個問題一替換和一個沒有,你應該只允許這兩個答案,實際上是鼓勵兩個答案。 – Pinocchio