假設我們有一個陣列arr
,我們想把陣列劃分為pieces保存元素的順序。使用以下方法可以輕松完成np.array_split:
import numpy
arr = np.array([0,1,2,3,4,5,6,7,8])
pieces = 3
np.array_split(arr,pieces)
>>> [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
如果arr.size % pieces != 0輸出np.array_split不均勻:
arr = np.array([0,1,2,3,4,5,6,7])
pieces = 3
np.array_split(arr,pieces)
>>> [array([0, 1, 2]), array([3, 4, 5]), array([6, 7])]
我想知道在程式中添加隨機化以等概率獲得以下輸出的最佳方法是什么:
>>> [array([0, 1]), array([2, 3, 4]), array([5, 6, 7])]
>>> [array([0, 1, 2]), array([3, 4]), array([5, 6, 7])]
>>> [array([0, 1, 2]), array([3, 4, 5]), array([6, 7])]
我對通用解決方案感興趣,它也適用于陣列大小和塊數的其他組合,例如:
arr = np.array([0,1,2,3,4,5,6,7,8,9])
pieces = 6
uj5u.com熱心網友回復:
def random_arr_split(arr, n):
# NumPy doc: For an array of length l that should be split into n sections,
# it returns l % n sub-arrays of size l//n 1 and the rest of size l//n
piece_lens = [arr.size // n 1] * (arr.size % n) [arr.size // n] * (n - arr.size % n)
piece_lens_shuffled = np.random.permutation(piece_lens)
# drop the last element, which is the end of the array
# otherwise getting an empty array at the end
split_indices = np.cumsum(piece_lens_shuffled)[:-1]
return np.array_split(arr, split_indices)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533780.html
