如果我有以下串列
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
然后
np.array_split([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 3)
退貨
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
有沒有辦法按以下順序獲取子陣列?
[array([0, 3, 6, 9]), array([1, 4, 7]), array([2, 5, 8])]
uj5u.com熱心網友回復:
由于串列的長度不同,因此 anumpy.ndarray不費吹灰之力是不可能的,因為所有子陣列的長度必須相同。
但是,如果一個簡單的list滿足您的要求,您可以使用:
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l2 = []
for i in range(3):
l2.append(l[i::3])
輸出:
[[0, 3, 6, 9], [1, 4, 7], [2, 5, 8]]
或者更簡潔地說,給出相同的輸出:
[l[i::3] for i in range(3)]
uj5u.com熱心網友回復:
讓我們看看源代碼重構np.array_split:
def array_split(arr, Nsections):
Neach_section, extras = divmod(len(arr), Nsections)
section_sizes = ([0] extras * [Neach_section 1] (Nsections - extras) * [Neach_section])
div_points = np.array(section_sizes).cumsum()
sub_arrs = []
for i in range(Nsections):
st = div_points[i]
end = div_points[i 1]
sub_arrs.append(arr[st:end])
return sub_arrs
考慮到您的示例arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],Nsections = 3它將構建部分大小[0, 4, 3, 3]和分割點[0, 4, 7, 10]。然后做這樣的事情:
[arr[div_points[i]:div_points[i 1]] for i in range(3)]
試圖模仿 的行為numpy,確實,
def array_split_withswap(arr, N):
sub_arrs = []
for i in range(N):
sub_arrs.append(arr[i::N])
是最好的選擇(就像在@S3DEV 解決方案中一樣)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420309.html
標籤:
上一篇:過濾多年熊貓
