Julia中Matlab的cell2mat的等价性是什么?

问题描述 投票:2回答:2

好吧,我不确定你们中有些人是否遇到过同样的问题。我需要将matlab程序转换为julia,其中'cell2mat'被广泛使用。例如,大矩阵A由3 * 2小矩阵组成,参见a11,a12,a21,a22,a31,a32,其尺寸均为4 * 2。或者A = [a11 a12; a21 a22; a31 a32]a11 = rand(4,2)为例。我首先使用Array{Array{Float64,2},1}类型来创建整个矩阵A.然后,我需要将此A转换为通常的矩阵,比如Array{Float64,2}。我确实尝试像hvcat((NUM),A...)那样做,但转换后的矩阵的顺序与原始的Array{Array{Float64,2},1}类型不对应。感谢任何能提供一些滑雪道的人。祝大家一切顺利!

matlab matrix concatenation julia
2个回答
1
投票

让我们从一个数组开始:

A = [reshape((1:8) .+ (10i+100j), 4, 2) for i in 1:3, j in 1:2]

这样我们就可以直观地验证结果是否正确。

现在的方法可能是:

hcat([vcat(A[:,i]...) for i in 1:size(A,2)]...)

在Julia 0.7中,您可以使用permutedims不是递归的事实来以更简单的方式获得相同的事实:

hvcat(size(A,2), permutedims(A)...)

这也适用于朱莉娅0.6,但你必须写permutedims(A, (2,1))

作为旁注,有趣的是(这里有问题)hvcat遍历行中的参数,但矩阵存储在列中。

编辑:实际上transpose在0.7递归,改为permutedims,也在0.6以下工作。


0
投票

通过转置数组数组的原始元素---当然是矩阵----然后在命令中转换数组的最后一个数组,例如hvcat(NUM,A ...'),正确的答案可以被找寻到。

© www.soinside.com 2019 - 2024. All rights reserved.