根据某些条件从 numpy 数组中删除行并连接结果



>我有一个 numpy 数组列表,我想根据某种条件删除一行。
假设我有以下 numpy 数组列表,我想删除包含> 8 项的行。

test = [np.array([[2,2,4],[10,3,5],[1,2,4,],[1,2,4]]),
np.array([[1,2,3],[1,3,5],[6,3,1],[9,1,2]])]
for i in test:
z = np.argwhere(i>8)
print(z)#[[1 0]] and [[3 0]]
a1 = np.delete(i,z,axis=0)
print(a1)

这个 for 循环跳过索引 [0] 的 numpy 数组。我该如何解决这个问题?
退货

[[1 2 4]
[1 2 4]]
[[1 3 5]
[6 3 1]]

理想的回报

[[2,2,4]
[1 2 4]
[1 2 4]]
[[1,2,3]
[1 3 5]
[6 3 1]]

从您的示例中,您想从第一个数组中删除索引为 1 的行,
从第二个数组中删除索引为 3 的行.
因此,在执行np.delete时使用这些索引:

a1 = np.delete(i, z[0][0], axis=0)

np.argwhere将返回两个索引,但我们只对行感兴趣:

np.argwhere(i > 8)[:, 0]

但实际上,我们只对唯一行感兴趣,所以我们也可以处理这个问题:

np.unique(np.argwhere(i > 8)[:, 0])

我们总共得到:

test = [np.array([[2,2,4],[10,3,5],[1,2,4,],[1,2,4]]),np.array([[1,2,3],[1,3,5],[6,3,1],[9,1,2]])]

for i in test:
z = np.unique(np.argwhere(i>8)[:, 0])
a1 = np.delete(i,z,axis=0)
print(a1)
#[[2 2 4]
# [1 2 4]
# [1 2 4]]
#[[1 2 3]
# [1 3 5]
# [6 3 1]]

最新更新