3
所以我想知道是否有更有效的解決方案來生成使用np.random.choice
的2-D陣列,其中每行都有唯一的值。Numpy隨機選擇產生具有所有唯一值的2D陣列
例如,對於與形狀(3,4)
陣列,我們期望的輸出:
# Expected output given a shape (3,4)
array([[0, 1, 3, 2],
[2, 3, 1, 0],
[1, 3, 2, 0]])
這意味着,對於每一行中的值必須相對於列數是唯一的。因此,對於out
中的每一行,整數應該只在0到3之間。
我知道我可以通過將False
傳遞給參數來實現它。但是我只能爲每一行做,而不是整個矩陣。舉例來說,我可以這樣做:
>>> np.random.choice(4, size=(1,4), replace=False)
array([[0,2,3,1]])
但是,當我嘗試這樣做:
>>> np.random.choice(4, size=(3,4), replace=False)
我得到這樣一個錯誤:
File "<stdin>", line 1, in <module>
File "mtrand.pyx", line 1150, in mtrand.RandomState.choice
(numpy\random\mtrand\mtrand.c:18113)
ValueError: Cannot take a larger sample than population when
'replace=False'
我想這是因爲它試圖繪製3 x 4 = 12
樣本由於矩陣的大小沒有更換,但我只給它一個4
的限制。
我知道我可以通過使用for-loop
解決這個問題:
>>> a = (np.random.choice(4,size=4,replace=False) for _ in range(3))
>>> np.vstack(a)
array([[3, 1, 2, 0],
[1, 2, 0, 3],
[2, 0, 3, 1]])
但我想知道是否有一個變通方法,而無需使用任何for循環? (我有點假設添加for循環可能會使它變慢,如果我有大於1000的行數。但正如你可以看到我實際上在a
創建一個生成器,所以我也不確定它是否有一個效果畢竟)
好的技巧=假。 +1 –
太棒了!非常感謝! –
這是天才,謝謝! – Anonymous