在numpy中查找行中min元素的索引会给出elementwise ==比较失败的错误

时间:2018-03-08 07:25:42

标签: python numpy

我有一个2D numpy数组,我试图找到对应于每行中最小元素的索引。我的代码如下所示:

dist=np.array([[0.15, 0.07, 0.14, 0.17, 0.15],
[0.16, 0.07, 0.14, 0.19, 0.15],
[0.10, 0.  , 0.10, 0.14, 0.09],
[0.07, 0.  , 0.06, 0.05, 0.14],
[0.10, 0.10, 0.  , 0.17, 0.06],
[0.08, 0.10, 0.07, 0.15, 0.03],
[0.05, 0.09, 0.06, 0.13, 0.  ],
[0.  , 0.10, 0.10, 0.07, 0.05],
[0.06, 0.14, 0.16, 0.02, 0.11],
[0.07, 0.14, 0.17, 0.  , 0.13]])
x= dist.min(axis=1)
print x
idx= np.where(dist==x)
print idx
print a[idx]

我得到以下输出

[0.07 0.07 0.   0.   0.   0.03 0.   0.   0.02 0.  ]
(array([], dtype=int64),)
[]
/Library/Python/2.7/site-packages/ipykernel_launcher.py:13: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
  del sys.path[0]

由于某种原因,索引值为空,我也收到警告/错误?相反,我想要检索的索引是(0,1),(1,1),(2,1)等等,对应于每行中的最小元素。

1 个答案:

答案 0 :(得分:0)

使用min_indices = np.argmin(dist, axis=1) min_tuples = [(row, col) for row, col in enumerate(min_indices)] # outputs: array([1, 1, 1, 1, 2, 4, 4, 0, 3, 3]) # [(0, 1), (1, 1), (2, 1), (3, 1), (4, 2), (5, 4), (6, 4), (7, 0), (8, 3), (9, 3)] 查找索引:

np.min??

FWIW,可以通过ipython shell中的set访问此信息。