Julia:在矩阵的各行中广播“findfirst()”
Julia: broadcasting `findfirst()` across rows of a matrix
我想在满足某些条件的矩阵的每一行中找到第一个值的索引。我想弄清楚如何在不使用数组推导的情况下做到这一点。
这就是我使用数组理解的方式:
# let's say we want to find the first column index, per row, where a number in that row is below some threshold.
threshold = 0.5;
data = randn(50,100);
first_threshold_crossings = [findfirst(data[i,:]<threshold) for i in 1:size(data,1)];
生成一个索引列表,告诉您每行在哪里(按列)有一个值首先低于阈值,从左到右。
你能想到有什么更快的方法吗?
你可以这样做:
julia> using Random # For RNG reproducability
julia> A = rand(Random.MersenneTwister(0), 3, 3)
3×3 Array{Float64,2}:
0.823648 0.177329 0.0423017
0.910357 0.27888 0.0682693
0.164566 0.203477 0.361828
julia> findfirst.(x < 0.1, eachrow(A))
3-element Array{Union{Nothing, Int64},1}:
3
3
nothing
注意findfirst
returns nothing
如果没有索引满足条件
我想在满足某些条件的矩阵的每一行中找到第一个值的索引。我想弄清楚如何在不使用数组推导的情况下做到这一点。
这就是我使用数组理解的方式:
# let's say we want to find the first column index, per row, where a number in that row is below some threshold.
threshold = 0.5;
data = randn(50,100);
first_threshold_crossings = [findfirst(data[i,:]<threshold) for i in 1:size(data,1)];
生成一个索引列表,告诉您每行在哪里(按列)有一个值首先低于阈值,从左到右。
你能想到有什么更快的方法吗?
你可以这样做:
julia> using Random # For RNG reproducability
julia> A = rand(Random.MersenneTwister(0), 3, 3)
3×3 Array{Float64,2}:
0.823648 0.177329 0.0423017
0.910357 0.27888 0.0682693
0.164566 0.203477 0.361828
julia> findfirst.(x < 0.1, eachrow(A))
3-element Array{Union{Nothing, Int64},1}:
3
3
nothing
注意findfirst
returns nothing
如果没有索引满足条件