使用循环删除数组中的不同行
Delete the different rows in array with a loop
我有一个包含多行的 numpy 数组,我想删除索引为 0、1、2 和 6 的行 +0、6+1、6+2 和 2 * 6+0、2 * 6 +1,和 2 * 6+2,和 ... c * 6+0,c * 6+1,c * 6+2。我知道可以使用 np.delete
,但是我不知道如何遍历不同的索引。这是一个例子:
a = np.array([[4, 5],
[4, 2],
[1, 2],
[2, 3],
[3, 1],
[0, 1],
[1, 1],
[1, 0],
[1, 5],
[5, 4],
[2, 3],
[5, 5]])
我想要的输出是:
out = np.array([
[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
您可以过滤掉它们,而不是删除它们:
out = a[~np.isin(np.arange(len(a))%6, [0,1,2])]
输出:
array([[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
这是一种廉价的方法。我合并 6 行的集合,删除左半部分,然后恢复形状:
>>> a = np.array([[4, 5], [4, 2], [1, 2], [2, 3], [3, 1], [0, 1], [1, 1], [1, 0], [1, 5], [5, 4], [2, 3], [5, 5]])
>>> a.shape
(12, 2)
>>> a.reshape((-1,12))
array([[4, 5, 4, 2, 1, 2, 2, 3, 3, 1, 0, 1],
[1, 1, 1, 0, 1, 5, 5, 4, 2, 3, 5, 5]])
>>> a.reshape((-1,12))[:,6:]
array([[2, 3, 3, 1, 0, 1],
[5, 4, 2, 3, 5, 5]])
>>> a.reshape((-1,12))[:,6:].reshape(-1,2)
array([[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
>>>
reshape 调用很便宜,因此唯一的成本是选择列子集。
我有一个包含多行的 numpy 数组,我想删除索引为 0、1、2 和 6 的行 +0、6+1、6+2 和 2 * 6+0、2 * 6 +1,和 2 * 6+2,和 ... c * 6+0,c * 6+1,c * 6+2。我知道可以使用 np.delete
,但是我不知道如何遍历不同的索引。这是一个例子:
a = np.array([[4, 5],
[4, 2],
[1, 2],
[2, 3],
[3, 1],
[0, 1],
[1, 1],
[1, 0],
[1, 5],
[5, 4],
[2, 3],
[5, 5]])
我想要的输出是:
out = np.array([
[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
您可以过滤掉它们,而不是删除它们:
out = a[~np.isin(np.arange(len(a))%6, [0,1,2])]
输出:
array([[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
这是一种廉价的方法。我合并 6 行的集合,删除左半部分,然后恢复形状:
>>> a = np.array([[4, 5], [4, 2], [1, 2], [2, 3], [3, 1], [0, 1], [1, 1], [1, 0], [1, 5], [5, 4], [2, 3], [5, 5]])
>>> a.shape
(12, 2)
>>> a.reshape((-1,12))
array([[4, 5, 4, 2, 1, 2, 2, 3, 3, 1, 0, 1],
[1, 1, 1, 0, 1, 5, 5, 4, 2, 3, 5, 5]])
>>> a.reshape((-1,12))[:,6:]
array([[2, 3, 3, 1, 0, 1],
[5, 4, 2, 3, 5, 5]])
>>> a.reshape((-1,12))[:,6:].reshape(-1,2)
array([[2, 3],
[3, 1],
[0, 1],
[5, 4],
[2, 3],
[5, 5]])
>>>
reshape 调用很便宜,因此唯一的成本是选择列子集。