在python中使用numpy时,如何获取具有最多给定元素的二维矩阵(列表)中列和行的索引
例如,我有一个二维矩阵:在python中使用numpy时,如何获取具有最多给定元素的二维矩阵(列表)中列和行的索引,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,例如,我有一个二维矩阵: [0 0 0 0 5 0 0 0 0 5 0 0 5 0 0 0 0 0 5 5 5 5 5 0 5 0 0 0 5 0 0 5 0 5 0 0 0 0 5 0] 我想得到行和列的索引,它们的长度最长。应该是第三行第五列。我不想使用for循环来获得它,因为它花费了太多的时间;用python中的numpy模块解决这个问题吗?这里有一种方法a是数组,elem是要检查的元素: In [71]: a Out[71]: array([[0, 0, 5, 0,
[0 0 0 0 5 0 0 0
0 5 0 0 5 0 0 0
0 0 5 5 5 5 5 0
5 0 0 0 5 0 0 5
0 5 0 0 0 0 5 0]
我想得到行和列的索引,它们的长度最长。应该是第三行第五列。我不想使用for循环来获得它,因为它花费了太多的时间;用python中的numpy模块解决这个问题吗?这里有一种方法
a
是数组,elem
是要检查的元素:
In [71]: a
Out[71]:
array([[0, 0, 5, 0, 5, 0, 0, 0],
[0, 5, 0, 0, 0, 5, 0, 5],
[0, 0, 5, 0, 5, 0, 5, 0],
[0, 5, 0, 0, 0, 5, 0, 5],
[0, 0, 0, 0, 0, 5, 0, 0]])
In [72]: elem = 5
这将给出出现次数最多的元素的(第一)列:
In [73]: (a == elem).sum(axis=0).argmax()
Out[73]: 5
In [74]: (a == elem).sum(axis=1).argmax()
Out[74]: 1
这将给出出现次数最多的元素的(第一)行:
In [73]: (a == elem).sum(axis=0).argmax()
Out[73]: 5
In [74]: (a == elem).sum(axis=1).argmax()
Out[74]: 1
这里有一条路a
是数组,elem
是要检查的元素:
In [71]: a
Out[71]:
array([[0, 0, 5, 0, 5, 0, 0, 0],
[0, 5, 0, 0, 0, 5, 0, 5],
[0, 0, 5, 0, 5, 0, 5, 0],
[0, 5, 0, 0, 0, 5, 0, 5],
[0, 0, 0, 0, 0, 5, 0, 0]])
In [72]: elem = 5
这将给出出现次数最多的元素的(第一)列:
In [73]: (a == elem).sum(axis=0).argmax()
Out[73]: 5
In [74]: (a == elem).sum(axis=1).argmax()
Out[74]: 1
这将给出出现次数最多的元素的(第一)行:
In [73]: (a == elem).sum(axis=0).argmax()
Out[73]: 5
In [74]: (a == elem).sum(axis=1).argmax()
Out[74]: 1
数字从0开始
数字从0开始谢谢您的帮助@GeorgeSha很高兴听到:)基本上,我在这里使用列表理解
来计算每行/每列出现5
的次数list(a[x,:]).count(5)
这里将numpy.array
转换为list
,并使用python内置函数count()
。最后,我使用np.argmax
查找列表中最大值的索引,这很有帮助@GeorgeSha很高兴听到:)基本上,我在这里使用列表理解
来计算每行/每列出现5
的次数list(a[x,:]).count(5)
这里将numpy.array
转换为list
,并使用python内置函数count()
。最后,我使用np.argmax
查找列表中最大值的索引。谢谢,事实上,这种方法更快