在索引数组中组合逻辑操作 - Julia
combining logical operations in indexing array - Julia
给定一个 Julia 中的一维数组,找到位于 a (= 4) 和 b( = 7) 之间的所有元素。
a = 4;b = 7;
x = collect(1:10)
x[isless.(x,a)]
将找到数组中小于 a = 4 的所有元素。
如何在索引中合并两个逻辑操作。
x[isless.(x,a) && !isless.(x,b)]
没有锻炼。
您需要使用广播 &&
(或者,在较旧的 Julia 版本中,&
):
julia> x[isless.(x,b) .&& (!isless).(x,a)]
3-element Vector{Int64}:
4
5
6
julia> x[isless.(x,a) .& (!isless).(x,b)]
Int64[]
另一件要注意的事情是 !
与 .
的优先级——您需要使用 (!isless).(x, a)
或 .!isless.(x, a)
来获得正确的广播行为。
如果您可以使用 <
运算符而不是 isless
(这很可能是这种情况,除非您使用 NaN
、missing
或 -0.0
) 那么你可以这样写:
julia> x[a .< x .< b]
2-element Vector{Int64}:
5
6
或者您可以使用 filter
:
julia> filter(v -> a < v < b, x)
2-element Vector{Int64}:
5
6
这让我想到了添加此评论的原因。您要求 就地 操作。这对于索引是不可能的,但是如果您使用 Vector
:
,则可以使用 filter!
实现它
julia> filter!(v -> a < v < b, x)
2-element Vector{Int64}:
5
6
julia> x
2-element Vector{Int64}:
5
6
给定一个 Julia 中的一维数组,找到位于 a (= 4) 和 b( = 7) 之间的所有元素。
a = 4;b = 7;
x = collect(1:10)
x[isless.(x,a)]
将找到数组中小于 a = 4 的所有元素。
如何在索引中合并两个逻辑操作。
x[isless.(x,a) && !isless.(x,b)]
没有锻炼。
您需要使用广播 &&
(或者,在较旧的 Julia 版本中,&
):
julia> x[isless.(x,b) .&& (!isless).(x,a)]
3-element Vector{Int64}:
4
5
6
julia> x[isless.(x,a) .& (!isless).(x,b)]
Int64[]
另一件要注意的事情是 !
与 .
的优先级——您需要使用 (!isless).(x, a)
或 .!isless.(x, a)
来获得正确的广播行为。
如果您可以使用 <
运算符而不是 isless
(这很可能是这种情况,除非您使用 NaN
、missing
或 -0.0
) 那么你可以这样写:
julia> x[a .< x .< b]
2-element Vector{Int64}:
5
6
或者您可以使用 filter
:
julia> filter(v -> a < v < b, x)
2-element Vector{Int64}:
5
6
这让我想到了添加此评论的原因。您要求 就地 操作。这对于索引是不可能的,但是如果您使用 Vector
:
filter!
实现它
julia> filter!(v -> a < v < b, x)
2-element Vector{Int64}:
5
6
julia> x
2-element Vector{Int64}:
5
6