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

时间:2016-05-19 09:49:50

标签: python numpy matrix min minimum

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

我的矩阵是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]),但它返回1 < / strong>即可。它返回3作为矩阵的最小值。 错误是什么?

2 个答案:

答案 0 :(得分:0)

这有用吗?

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

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

答案 1 :(得分: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数组的大小可能有用,我还没有对它进行测试,但这个概念应该是一个简单的解决方案。但我更喜欢在输入矩阵

的情况下使用嵌套列表