Python 标记或numpy数组到整数元组?
我试图得到一个元组,其中包含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,)] 但我想要
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()
也会起作用。