我有一个多维矩阵,我希望以(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]]
答案 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)]