如何使用Python查找2d矩阵中所有元素的所有索引?

时间:2016-01-11 11:50:51

标签: python

我有一个多维矩阵,我希望以(i,j)的形式找到矩阵中所有元素的索引。哦,不幸的是我不能使用numpy模块。所以,代码没有' numpy'非常感谢伙计们。

矩阵是:

[[0, 1.0, 1.0, 1.0, 5.0, 4.0], 
 [1.0, 0, 1.0, 1.0, 5.0, 4.0], 
 [1.0, 1.0, 0, 1.0, 1.0, 1.0], 
 [1.0, 1.0, 1.0, 0, 1.0, 1.0], 
 [5.0, 5.0, 1.0, 1.0, 0, 0], 
 [4.0, 4.0, 1.0, 1.0, 0, 0]]

1 个答案:

答案 0 :(得分:1)

编辑:如果您指的是所有索引对的列表(对于任何元素),您可以这样做:

[(i,j) for i in range(len(m)) for j in range(len(m[i]))]

[(0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
...
 (5, 4),
 (5, 5)]

对于非零元素的索引,添加条件:

[(i,j) for i in range(len(m)) for j in range(len(m[i])) if m[i][j] != 0]

[(0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
...
 (5, 2),
 (5, 3)]

你可以找到具有特定值的每个元素的索引,val具有双列表理解:

m = [[0, 1.0, 1.0, 1.0, 5.0, 4.0], 
     [1.0, 0, 1.0, 1.0, 5.0, 4.0], 
     [1.0, 1.0, 0, 1.0, 1.0, 1.0], 
     [1.0, 1.0, 1.0, 0, 1.0, 1.0], 
     [5.0, 5.0, 1.0, 1.0, 0, 0], 
     [4.0, 4.0, 1.0, 1.0, 0, 0]]

val = 1.0
[(i, j) for i, row in enumerate(m) for j, v in enumerate(row) if val==v]

[(0, 1),
 (0, 2),
 (0, 3),
 (1, 0),
 (1, 2),
 (1, 3),
 (2, 0),
 (2, 1),
 (2, 3),
 (2, 4),
 (2, 5),
 (3, 0),
 (3, 1),
 (3, 2),
 (3, 4),
 (3, 5),
 (4, 2),
 (4, 3),
 (5, 2),
 (5, 3)]

如果您正在使用NumPy(擅长此类事情),您可以使用np.where,它会返回您可以(取消)压缩的行和列坐标元组:

list(zip(*np.where(a==1.0)))

[(0, 1),
 (0, 2),
 (0, 3),
 (1, 0),
 (1, 2),
 (1, 3),
 (2, 0),
 (2, 1),
 (2, 3),
 (2, 4),
 (2, 5),
 (3, 0),
 (3, 1),
 (3, 2),
 (3, 4),
 (3, 5),
 (4, 2),
 (4, 3),
 (5, 2),
 (5, 3)]