如果下面显示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的工作原理。
答案 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
,因此它返回rows
,cols
作为列表。
它计算从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)]
请注意,此解决方案允许所需的模式可能出现多次。