在 Julia 中使用函数点表示法使用广播时获取元素索引

Get index of element when using broadcasting using function dot notation in Julia

如果我有以下示例函数

function isBigger(element)
   if element > 3
       println("element bigger than three")
   end
end

我在 a=[1 5 7 2] 上用 isBigger.(a) 调用它。 我得到:

>bigger than three
>bigger than three

我该怎么做才能获得元素的索引? 我想得到

>Element at index 2 is bigger than three
>Element at index 3 is bigger than three

应该仍然可以在单个值上调用函数,例如 isBigger(4):

isBigger(4)
>bigger than three

你可以使用findall函数

julia> a=[1,5,7,2];
julia> findall(x->x>3, a)
2-element Vector{Int64}:
 2
 3

您也可以将其与您的函数结合使用

function isBigger(element)
   if element > 3
       println("element bigger than three")
       return true
   else
       return false
   end
end

findall(isBigger, a)

这不是典型的广播工作,因为您需要跟踪索引。因此,对元素进行正常循环是这里的正确选择。现在,正如@Antonello 指出的那样,因为您的函数有两种不同的逻辑,所以您最好使用 Julia 的 multiple-dispatch 机制。为标量创建一个小函数,为数组创建一个更受限制的函数。

isBigger(n) = n > 3 && println("Bigger than 3") 

isBigger(a::AbstractArray) = begin
    for i in eachindex(a)
        a[i] > 3 && println("Element at $i is bigger than 3") 
    end
end 

工作原理如下:

a = [1, 5, 7, 2]
isBigger(a)
 Element at 2 is bigger than 3
 Element at 3 is bigger than 3

isBigger(4)
 Bigger than 3