不同长度的变量怎么用广播

我有两个变量x和y,我想每循环一个x,和y做个交集,每循环一个x返回一个Vector

x=[10,20,30]
y=[50,60,70,80]
function m(i,y)
    n=i:i+50
    return [i,i+50,length(intersect(n,y))]
end
a=[]
for i in x
    push!(a,m(i,y))
end
julia> a
3-element Vector{Any}:
 [10, 60, 2]
 [20, 70, 3]
 [30, 80, 4]

我能想到的就是这样用for 并且push,请问下这个能用广播么?我一直对这种变量数不统一的不知道怎么高效实现,能想到的就是for和push?希望各位大佬指导

看起来可能需要自己写广播规则?不太熟悉广播,提供另外一种思路抛砖引玉了。

我的思路是列表推导,代码如下:

julia> [[i, i+50, length(intersect(i:i+50, y))] for i in x]
3-element Vector{Vector{Int64}}:
 [10, 60, 2]
 [20, 70, 3]
 [30, 80, 4]

还可以使用reducehcatVector{Vector{Int64}}转换为Matrix{Int64}

julia> reduce(hcat,[[i, i+50, length(intersect(i:i+50, y))] for i in x])
3×3 Matrix{Int64}:
 10  20  30
 60  70  80
  2   3   4

如果一定要按行存储每步的结果,代码如下:

julia> reduce(vcat,[[i, i+50, length(intersect(i:i+50, y))] for i in x]')
3×3 Matrix{Int64}:
 10  60  2
 20  70  3
 30  80  4
1 个赞

谢谢您的解答,我再研究研究

length(interset...) 不如用 count

[[i, i+50, count(i-> j ≤ i ≤ j+50, y)] for j in x]
2 个赞