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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Julia中Matlab的cell2mat的等价性是什么?相关的知识,希望对你有一定的参考价值。

好吧,我不确定你们中有些人是否遇到过同样的问题。我需要将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}类型不对应。感谢任何能提供一些滑雪道的人。祝大家一切顺利!

答案

让我们从一个数组开始:

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以下工作。

另一答案

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

以上是关于Julia中Matlab的cell2mat的等价性是什么?的主要内容,如果未能解决你的问题,请参考以下文章

使用MATLAB cell2mat()函数时支持索引错误

是否可以像在 Matlab 中一样在 Julia 中嵌套 tic() 和 toc() ?如果不是,那么解决方法是啥?

Julia 的广播速度是 Matlab 的两倍

Matlab 与 Julia 与 Fortran 中的速度

MATLAB3: 矩阵分块函数mat2cell 及 cellfun 函数

Julia - 数学运算