在 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
如果我有以下示例函数
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