如何在julia中展平2D数组?
julia中是否有将二维数组转换为一维数组的函数? 例如,我知道如何定义一个函数,但我不想每次都写它如何在julia中展平2D数组?,julia,Julia,julia中是否有将二维数组转换为一维数组的函数? 例如,我知道如何定义一个函数,但我不想每次都写它 function flatten(Mat) n, m = size(Mat) flattened = zeros(m*n) for i=1:n for j=1:m flattened[(i-1)*m + j] = Mat[i,j] end end return flattened end 您可以使用vec(): 另一个选项是,如果您使用列主窗体来利用julia的
function flatten(Mat)
n, m = size(Mat)
flattened = zeros(m*n)
for i=1:n
for j=1:m
flattened[(i-1)*m + j] = Mat[i,j]
end
end
return flattened
end
您可以使用
vec
():
另一个选项是,如果您使用列主窗体来利用julia的数组排序:
A = randn(10,10)
10×10 Array{Float64,2}:
其中,
:
将每列按顺序放入输出向量。要添加到当前解决方案中,迭代器.flatten
以惰性方式执行此操作,不移动内存中的内容,而是定义一个迭代器逐个返回元素:
julia> A = rand(2,2)
2×2 Array{Float64,2}:
0.667687 0.016606
0.720289 0.12541
julia> collect(Iterators.flatten(A))
4-element Array{Float64,1}:
0.6676867119775669
0.7202889070377703
0.016606038041509397
0.12540966422381583
急切地,您可以使用a来理解a的索引:
julia> [A[i] for i in eachindex(A)]
4-element Array{Float64,1}:
0.6676867119775669
0.7202889070377703
0.016606038041509397
0.12540966422381583
?谢谢,但我希望行彼此相邻,这需要转换数组。Julia是列主键,所以按行排列必然会慢一些,我认为这不是一个好主意。如果可能的话,您应该尝试设计与列相关的算法。如果必须,可以使用
vec(A')
。
julia> A = rand(2,2)
2×2 Array{Float64,2}:
0.667687 0.016606
0.720289 0.12541
julia> collect(Iterators.flatten(A))
4-element Array{Float64,1}:
0.6676867119775669
0.7202889070377703
0.016606038041509397
0.12540966422381583
julia> [A[i] for i in eachindex(A)]
4-element Array{Float64,1}:
0.6676867119775669
0.7202889070377703
0.016606038041509397
0.12540966422381583