指数或numpy数组到整数元组?

时间:2015-09-25 17:22:27

标签: python arrays numpy

我正在尝试获取一个包含numpy数组中最小值的指示的元组。

import numpy as np
a=np.array(([2,3,1],[5,4,6],[8,7,9]))
b=np.where(a==np.min(a))
print(b)

给出:

(array([0]),array([2]))

尝试将结果映射到元组:

c=map(tuple,b)
print(c)

给出:

[(0,), (2,)]

但我想要的是:

(0,2)

除了np.where之外的任何建议都是完全可以接受的。感谢。

2 个答案:

答案 0 :(得分:5)

获得所需结果的最简单方法是

>>> np.unravel_index(a.argmin(), a.shape)
(0, 2)

argmin()方法在单次传递中查找展平数组中最小元素的索引,因此比首先找到最小值然后使用线性搜索查找最小值索引更有效。

第二步,np.unravel_index()将标量索引转换为扁平数组,返回索引元组。请注意,索引元组的条目具有类型np.int64而不是普通int

答案 1 :(得分:2)

对于具有相同min值的多个元素的情况,您可能希望拥有元组列表。对于这种情况,您可以在对map获取的行和列信息进行列堆叠后使用np.where,就像这样 -

map(tuple,np.column_stack(np.where(a==np.min(a))))

示例运行 -

In [67]: a
Out[67]: 
array([[2, 2, 0, 1, 0],
       [0, 2, 0, 0, 3],
       [1, 0, 1, 2, 1],
       [0, 3, 3, 3, 3]])

In [68]: map(tuple,np.column_stack(np.where(a==np.min(a))))
Out[68]: [(0, 2), (0, 4), (1, 0), (1, 2), (1, 3), (2, 1), (3, 0)]