如何在矩阵中找到元素== 0的索引?每行和每列应仅出现一次

时间:2019-05-17 16:27:28

标签: python tensorflow

我有一个4x4矩阵,想找到elements == 0的索引。使用tf.where(tf.equal(matrix,0))我得到类似的东西:

array([[0, 0],[0, 1], [1, 3],[2, 1],[3, 2]])

如何从列表中删除[0,1],因为我只希望每一行和每一列都有一个元素。

有没有一种方法可以自动删除已经存在的元素?

matrix    = [[    0.,     0., 12989., 32048.],
            [13292.,  9700.,  4485.,     0.],
            [24344.,     0.,  4125., 45000.],
            [14541.,  2325.,     0., 12795.]]
list_zero = tf.where(tf.equal(matrix,0))
list_zero = [[0, 0],[0, 1], [1, 3],[2, 1],[3, 2]]

我想得到这个结果:

list_zero = [[0, 0],[1, 3],[2, 1],[3, 2]]

1 个答案:

答案 0 :(得分:0)

这将属于“后处理”类方法,并且仅使用带条件的循环,但这似乎可以提供所需的答案。您可以将其放在函数中,并在输出中使用它。这种方法对重复项进行优先排序,而忽略列重复项。

clean_list_zero = []
buffer = []
for idx, item in enumerate(list_zero):
    buffer.append(item)
    if idx > 0:
        if buffer[idx-1][0] == buffer[idx][0]:
            continue
        else:
            clean_list_zero.append(item)
    else:
        clean_list_zero.append(item)
print(clean_list_zero)

>>> [[0, 0], [1, 3], [2, 1], [3, 2]]