你可以使用一些预处理去除零,这里有一个例子:
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:]'(如上)。 –