我怎樣才能將這樣的陣列分割成 n 個子集,其中一個子集由連續的值組成?
arr = np.array((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, 69, 70, 71))
# tells me where they are consecutive
np.where(np.diff(arr) == 1)[0]
# where the break points are
cut_points = np.where(np.diff(arr) != 1)[0] 1
# wont generalize well with n-many situations
arr[:cut_points[0] ]
arr[cut_points[0] : cut_points[1] ]
arr[cut_points[1] :, ]
uj5u.com熱心網友回復:
您可以使用np.split, 并將cut_points其作為第二個引數傳入。
例如。
split_arr = np.split(arr, cut_points)
# split_arr looks like:
# [array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
# array([39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]),
# array([66, 67, 68, 69, 70, 71])]
完整解決方案:
import numpy as np
arr = np.array((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, 69, 70, 71))
cut_points = np.where(np.diff(arr) != 1)[0] 1
split_arr = np.split(arr, split_points)
split_arr
# outputs:
[array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]),
array([39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]),
array([66, 67, 68, 69, 70, 71])]
uj5u.com熱心網友回復:
就像另一種方式一樣,沒有 pandas/numpy。
如果您不關心輸入/輸出的順序,您可以從最后開始并執行以下操作:
l = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 66, 67, 68, 69, 70, 71)
i = 0
current_index = -1
prev_value = None
result = []
for k in l[::-1]:
current_value = k i
if prev_value != current_value:
prev_value = current_value
current_index = 1
result.append([])
result[current_index].append(k)
i = 1
print(result)
然后結果將包含:
[
[71, 70, 69, 68, 67, 66],
[55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39],
[14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537825.html
標籤:Python数组麻木的
