在julia中,是否有将2D数组转换为1D数组的函数?例如,我知道可以通过定义一个函数来实现,但我不想每次都写它。
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
在julia中,是否有将2D数组转换为1D数组的函数?例如,我知道可以通过定义一个函数来实现,但我不想每次都写它。
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
(https://docs.julialang.org/en/v1/base/arrays/#Base.vec):
julia> A = rand(2, 2)
2×2 Array{Float64,2}:
0.843062 0.164179
0.167501 0.800111
julia> vec(A)
4-element Array{Float64,1}:
0.8430624537022231
0.16750120450998196
0.16417911360611237
0.8001111380491013
vec(A')
。 - DNFIterators.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
您可以热切地使用for循环在A的索引上:
julia> [A[i] for i in eachindex(A)]
4-element Array{Float64,1}:
0.6676867119775669
0.7202889070377703
0.016606038041509397
0.12540966422381583
如果您使用列主序形式来利用Julia的数组排序,则可以选择另一种选项:
A = randn(10,10)
10×10 Array{Float64,2}:
a = A[:]
100-element Array{Float64,1}:
:
将每个列按顺序放入输出向量中。