你可以使用一些預處理去除零,這裏有一個例子:
import numpy as np
a = np.random.randint(0, 5, 100)
idx = np.where(a == 0)[0]
np.split(a, idx)
輸出:
[array([4, 3]),
array([0, 3, 1, 1]),
array([0, 4]),
array([0]),
array([0, 1, 2, 4]),
array([0, 4, 2, 2, 3, 1]),
array([0, 2, 4, 3]),
array([0, 2, 2, 4]),
array([0, 3, 2, 1, 2, 4, 1, 2]),
array([0]),
array([0]),
array([0, 1, 3]),
array([0]),
array([0, 1, 3, 2, 4]),
array([0, 3, 3]),
array([0, 3]),
array([0, 3, 4, 1, 2, 3, 3, 4, 3, 4, 2, 1]),
array([0]),
array([0, 3, 2]),
array([0]),
array([0, 4, 1, 4, 2, 3, 1]),
array([0, 4]),
array([0]),
array([0]),
array([0, 3, 4, 2, 3]),
array([0, 4, 4, 3, 3, 3, 1]),
array([0, 2, 4, 1]),
array([0, 4, 2, 2]),
array([0])]
撤除a
全部爲零,並計算新的索引:
idx2 = idx - np.arange(len(idx))
b = np.delete(a, idx)
np.split(b, np.unique(idx2))
這是輸出:
[array([4, 3]),
array([3, 1, 1]),
array([4]),
array([1, 2, 4]),
array([4, 2, 2, 3, 1]),
array([2, 4, 3]),
array([2, 2, 4]),
array([3, 2, 1, 2, 4, 1, 2]),
array([1, 3]),
array([1, 3, 2, 4]),
array([3, 3]),
array([3]),
array([3, 4, 1, 2, 3, 3, 4, 3, 4, 2, 1]),
array([3, 2]),
array([4, 1, 4, 2, 3, 1]),
array([4]),
array([3, 4, 2, 3]),
array([4, 4, 3, 3, 3, 1]),
array([2, 4, 1]),
array([4, 2, 2]),
array([], dtype=float64)]
這些嵌套列表是否都是相同的長度(第一個除外)?如果是這樣的話,你可以在第一列加上'0',將它轉換爲二維數組,並刪除第一列。 – hpaulj
我想過這個。很不幸的是,不行。我最終希望將輸出作爲DataFrame,其中每列是來自此列表的數組。如果是這種形式,我認爲我應該可以按照你的建議做,但我仍然在努力研究df格式 – user3416961
迭代並對array_list中的項[item [1:]進行操作)相當快速。它不會複製數組。這基本上是你要求的。你實際上不能在原地從numpy數組中刪除一個項目。如果你想查看除了第一個項目以外的所有內容,但不做複製,只需要執行'item [1:]'(如上)。 –