如何在数组列表中就地删除数组元素
我使用了以下这行代码:
list_split_test_array = np.split(test_array, np.where(test_array == 0.)[0])
来把一个数组在每个0的地方分开,0是我之前随便加的一个占位符。
这样我得到了一个数组的列表,其中每个数组的第一个元素(除了第一个数组)都是0。
我想知道怎么能直接在原来的地方删除这些0,得到一个没有占位符0的数组列表。我说“直接在原来的地方”是因为我不想再遍历一遍,把删除了0的每个数组放到一个新的数组列表里。
1 个回答
1
你可以先做一些处理,把零去掉,这里有个例子:
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)]