如何编码以二维矩阵查找坐标?

时间:2020-01-13 01:53:01

标签: python

如果下面显示3x4矩阵,

a=[[1,2,3,4], [5,6,7,8], [9,10,11,12]]

我想找到7并将坐标值(2,3)绘制到变量中。

您有内置功能吗?

在matlab中,[row, col] = find(a==7)的结果是row = 2,col = 3。

我很好奇Python的工作原理。

3 个答案:

答案 0 :(得分:2)

初始化所需的矩阵值后,

val = 7

这是一个很好的单线:

array = [(ix,iy) for ix, row in enumerate(a) for iy, i in enumerate(row) if i == val]

输出print(array)

[(1, 2)]

请注意,单线将在矩阵中捕获数字7的所有实例,而不仅仅是一个。另请注意,索引从0开始,因此第2行将显示为1,第3列将显示为2。例如,如果您在一行中有多个7实例,并且想要实际的行号和列号(不是从0开始),这可能会有所帮助:

a=[[1,7,7,4], [5,6,7,8], [9,10,11,7]]
val = 7
array = [(ix+1,iy+1) for ix, row in enumerate(a) for iy, i in enumerate(row) if i == val]
print(array)

输出:

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

答案 1 :(得分:1)

要与Matlab类似,您必须使用numpy

import numpy as np

a = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]

a = np.array(a)

rows, cols = np.where(a == 7)

print(rows[0], cols[0])

它可以找到矩阵中的所有7,因此它返回rowscols作为列表。

它计算从0开始的行/列,因此您可能必须添加+1才能获得与matlab相同的结果

答案 2 :(得分:0)

我将使用numpy的where函数。这是another post that displays it's use nicely。我会将其应用于您的用例,如下所示:

 import numpy as np

arr = np.array([[1, 2, 3],[4, 100, 6],[100, 8, 9]])
positions = np.where(arr == 100)
# positions = (array([1, 2], dtype=int64), array([1, 0], dtype=int64))
positions = [tuple(cor.item() for cor in pos) for pos in positions]
# positions = [(1, 2), (1, 0)]

请注意,此解决方案允许所需的模式可能出现多次。