gpt4 book ai didi

arrays - julia 函数从元组数组中选择一个元组

转载 作者:行者123 更新时间:2023-12-05 02:04:56 26 4
gpt4 key购买 nike

julia(ns) 同学 :)

我无法找出根据元组向量的最小值要求选择元组的最有效方法,下面的示例应该有助于理解

A = [(10,1), (34,2), (5,3)]

对于上面的元组向量,我想在数组中的所有元组首元素中选择首元素最小的元组,对于上面的情况应该是

(5,3)

我已经研究了好几个小时了,但还是想不出没有循环+虚拟变量的方法?

感谢任何帮助:D

最佳答案

此外,如果您的元组由支持对所有维度(不仅是第一个维度)进行比较的对象组成,或者您知道第一个维度是唯一的(以便下一个维度永远不会用于比较),那么您也可以只做:

julia> argmin(A)
3

julia> minimum(A)
(5, 3)

至于元组 argminminimum 默认使用字典序比较。

这将失败,例如这种情况(你在第一个维度上有平局,第二个维度不支持比较):

julia> argmin([(1,im), (1,im)])
ERROR: MethodError: no method matching isless(::Complex{Bool}, ::Complex{Bool})

但这有效,因为拳头维度没有关系:

julia> argmin([(2,im), (1,im)])
2

另请注意,在与最小值有联系的情况下,如果与@mcabbott 给出的解决方案有联系,这可能会有所不同:

julia> A = [(1,2), (1,1)]
2-element Array{Tuple{Int64,Int64},1}:
(1, 2)
(1, 1)

julia> argmin(first.(A))
1

julia> argmin(A)
2

使用 first. 将返回第一个维度上第一次出现的最小值,而不使用 first. 将返回所有维度上第一次出现的最小值。

但如果您的问题满足我在这里给出的条件(这在实践中很可能),那么我的解决方案会更快,因为它是非分配的。

最后,如果您想要一个非分配的解决方案,并且与@mcabbott 提议的工作方式相同,请使用 reduce,如下所示:

julia> A = [(10,1), (34,2), (5,3)]
3-element Array{Tuple{Int64,Int64},1}:
(10, 1)
(34, 2)
(5, 3)

julia> reduce((x,y) -> y[2][1] < x[2][1] ? y : x, enumerate(A))
(3, (5, 3))

julia> A = [(1,im), (1,im)]
2-element Array{Tuple{Int64,Complex{Bool}},1}:
(1, im)
(1, im)

julia> reduce((x,y) -> y[2][1] < x[2][1] ? y : x, enumerate(A))
(1, (1, im))

julia> A = [(1,2), (1,1)]
2-element Array{Tuple{Int64,Int64},1}:
(1, 2)
(1, 1)

julia> reduce((x,y) -> y[2][1] < x[2][1] ? y : x, enumerate(A))
(1, (1, 2))

关于arrays - julia 函数从元组数组中选择一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63857523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com