Python 标记或numpy数组到整数元组?

Python 标记或numpy数组到整数元组?,python,arrays,numpy,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])) [(0,), (2,)] 正在尝试将结果映射到元组: c=map(tuple,b) print(c) 给出: (array([0]),array([2])) [(0,), (2,)] 但我想要

我试图得到一个元组,其中包含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]))
[(0,), (2,)]
正在尝试将结果映射到元组:

c=map(tuple,b)
print(c)
给出:

(array([0]),array([2]))
[(0,), (2,)]
但我想要的是:

(0,2)

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

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

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


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

,如果有多个元素具有相同的
min
值,则可能需要一个元组列表。对于这种情况,您可以在对从
np.where
获得的行和列信息进行列堆叠之后使用
map
,如下所示-

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)]

where
结果有什么问题
a[b]
为您提供了最小值,不是吗
where
返回数组的元组(等价列表),因为0,1或更多元素可能满足其真值条件。where的问题是,正如您所说,它返回数组的元组。我的字典键是int(0,2)的元组。除非我遗漏了什么,否则我的dict[b]=my dict[(数组([0])、数组([2])和我的dict[c]=my dict[(0,),(2,)]]都不与我的dict[(0,2)]相同,我会这样做:
{tuple([I[0]表示b中的I]):a[b]}
I.item()
也会起作用。