Julia 朱莉娅:如何得到二维数组的第一个元素,这些元素比向量的元素多?

Julia 朱莉娅:如何得到二维数组的第一个元素,这些元素比向量的元素多?,julia,Julia,我有一个二维数组,定义如下: > s = cumsum([0.1 0.2 0.3 0.4; 0.25 0.15 0.35 0.25; 0.3 0.3 0.3 0.1], dims=2) 3×4 Array{Float64,2}: 0.1 0.3 0.6 1.0 0.25 0.4 0.75 1.0 0.3 0.6 0.9 1.0 我定义了一个随机向量 > r = rand(3) 3-element Array{Float64,1}: 0.556057

我有一个二维数组,定义如下:

> s = cumsum([0.1 0.2 0.3 0.4; 0.25 0.15 0.35 0.25; 0.3 0.3 0.3 0.1], dims=2)
3×4 Array{Float64,2}:
 0.1   0.3  0.6   1.0
 0.25  0.4  0.75  1.0
 0.3   0.6  0.9   1.0
我定义了一个随机向量

> r = rand(3)
3-element Array{Float64,1}:
 0.5560575798047342
 0.4759478853774721
 0.48545434824655853
我知道这行代码返回的是s的所有元素,基于行比较,这些元素比r的元素多

> s.*(r .< s)
3×4 Array{Float64,2}:
 0.0  0.0  0.6   1.0
 0.0  0.0  0.75  1.0
 0.0  0.6  0.9   1.0

你可以考虑的两种方法是(我使用同一个<代码> R< /代码>)。< /P> 简单但有点冗长:

julia> x = r .< s
3×4 BitArray{2}:
 0  0  1  1
 0  0  1  1
 0  1  1  1

julia> s .* [x[i, j] - (j == 1 ? 0 : x[i, j - 1]) for i in axes(x, 1), j in axes(x, 2)]
3×4 Array{Float64,2}:
 0.0  0.0  0.6   0.0
 0.0  0.0  0.75  0.0
 0.0  0.6  0.0   0.0
julia>x=r.s.[x[i,j]-(j==1?0:x[i,j-1]),用于轴(x,1)中的i,轴(x,2)中的j]
3×4数组{Float64,2}:
0.0  0.0  0.6   0.0
0.0  0.0  0.75  0.0
0.0  0.6  0.0   0.0
还有一个类似的东西稍微短一点:

julia> using ShiftedArrays

julia> x = r .< s
3×4 BitArray{2}:
 0  0  1  1
 0  0  1  1
 0  1  1  1

julia> s .* coalesce.(x .- lag(x, (0, 1)), 0)
3×4 Array{Float64,2}:
 0.0  0.0  0.6   0.0
 0.0  0.0  0.75  0.0
 0.0  0.6  0.0   0.0
julia>使用移位数组
julia>x=r.s.*联合(x.-滞后(x,(0,1)),0)
3×4数组{Float64,2}:
0.0  0.0  0.6   0.0
0.0  0.0  0.75  0.0
0.0  0.6  0.0   0.0

这是否回答了您的问题?我想我只需要在每行中找到第二个最小值,并将所有其他非零元素的值更改为零。如果原始矩阵(在
cumsum
之前)包含
0
条目,则您提出的规则将不明确
julia> using ShiftedArrays

julia> x = r .< s
3×4 BitArray{2}:
 0  0  1  1
 0  0  1  1
 0  1  1  1

julia> s .* coalesce.(x .- lag(x, (0, 1)), 0)
3×4 Array{Float64,2}:
 0.0  0.0  0.6   0.0
 0.0  0.0  0.75  0.0
 0.0  0.6  0.0   0.0