Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在julia中展平2D数组?_Julia - Fatal编程技术网

如何在julia中展平2D数组?

如何在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的

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