Python: return 矩阵中最小值的行索引

Python: return the row index of the minimum in a matrix

我想打印包含矩阵的最小元素的行的索引

我的矩阵是matrix = [[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]]

和代码

matrix = [[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]]
a = np.array(matrix)
buff_min = matrix.argmin(axis = 0)

print(buff_min)   #index of the row containing the minimum element

min = np.array(matrix[buff_min])

print(str(min.min(axis=0)))  #print the minium of that row

print(min.argmin(axis = 0)) #index of the minimum

print(matrix[buff_min]) # print all row containing the minimum

在运行之后,我的结果是

1
3
1
[22, 3, 4, 12]

第一个数字应该是2,因为第三个列表中最小的是2 ([34,6,4,5,8,2]), 但它 returns 1。它returns 3 作为矩阵的最小值。 错误是什么?

这个有用吗?

np.where(a == a.min())[0][0]

请注意,矩阵的所有行都需要包含相同数量的元素。

我不确定您使用的 Python 是哪个版本,我针对 Python 2.7 和 3.2 进行了测试,正如您提到的 argmin 的语法是不正确,格式应该是

import numpy as np
np.argmin(array_name,axis)

接下来,Numpy 了解任意对象的数组,它针对具有固定维度的同构数字数组进行了优化。如果你真的需要数组的数组,最好使用嵌套列表。但是根据数据的预期用途,不同的数据结构可能会更好,例如如果您有一些无效数据点,则为屏蔽数组。

如果你真的想要灵活的 Numpy 数组,使用这样的东西:

np.array([[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]], dtype=object)

然而,这将创建一个存储对列表的引用的一维数组,这意味着您将失去 Numpy 的大部分优势(向量处理、局部性、切片等)。

此外,如果您可以调整您的 numpy 数组的大小,事情可能会奏效,我还没有测试过它,但根据这个概念,这应该是一个简单的解决方案。但是 在这种输入 矩阵

的情况下,我更喜欢使用嵌套列表