首页 > 解决方案 > 根据索引从矩阵中删除一些元素

问题描述

我有一个矩阵:

a = ([[1, 0, 0, 0],
       [0, 0, 1, 1],
       [0, 1, 0, 1]
       [1, 0, 0, 1]])

我想打印矩阵中的 0,但不是所有的 0。我只想在具有最小索引的每一行中保留 0,并删除该行中所有后续的零。例如,在该矩阵的第一行中,a[0][1]应保留第二个元素 ( ),而应删除第一行中的其余元素,因为它们全为零。

我用于pop()二维数组,但出现属性错误。而且输出也不正确。我不知道如何比较索引并在每一行中选择最小的列索引。

这是我的代码:

for ix, row in enumerate(a):
  for iy, i in enumerate(row):
    if i==0 and (iy+ix<(iy+1)+ix) :
        a[ix].pop((iy+1))
        print(ix,iy)
    elif i==0 and (iy+ix>(iy+1)+ix):
        a[ix].pop(iy)
        print(ix,iy+1)
print(a)

我的预期结果是一组索引和修改后的矩阵 a。

0 1

1 0

2 0

3 1

a=[[1,0],[0,1,1],[0,1,1],[1,0]]

有人可以帮我吗?

标签: pythonarrayspython-3.xmatrixnumpy-ndarray

解决方案


尝试这个:

a = [[1, 0, 0, 0],
       [0, 0, 1, 1],
       [0, 1, 0, 1],
       [1, 0, 0, 1]]

b = []
for i in a:
    f = False
    c = []
    for j in i:
        if (j==0 and f==False) or j != 0:
            c.append(j)
            if j == 0: f = True
        else:
            continue
    b.append(c)

输出:

[[1, 0], [0, 1, 1], [0, 1, 1], [1, 0, 1]]

要获取数组中的索引zero,您可以尝试以下操作:

list({i : j.index(0) for i,j in enumerate(b)}.items())
# [(0, 1), (1, 0), (2, 0), (3, 1)]

推荐阅读