使用 octave / matlab 重塑和重新排列数组

reshaping and re-arranging array using octave / matlab

我正在尝试重塑数组,执行操作,然后将其重塑回原始状态。请参阅我试图获得的输出示例。我可以得到 ab 但我很难让 c 再次看起来像 a

第一步)(原数组)

    1                     1                     1
    2                     2                     2
    3                     3                     3
    4                     4                     4
    5                     5                     5

步骤 2)(整形并执行一些操作)

1,1,1,2,2,2,3,3,3,4,4,4,5,5,5

步骤 3)(数组被重塑回原来的大小,看起来像 step 1这就是我想要的

    1                     1                     1
    2                     2                     2
    3                     3                     3
    4                     4                     4
    5                     5                     5

我可以获得变量 ab 但我不确定如何将 cb 重塑为 a请参阅下面的示例代码和输出

a=[repmat(1,[1,3]);repmat(2,[1,3]);repmat(3,[1,3]);repmat(4,[1,3]);repmat(5,[1,3])]
[rw,col]=size(a)
b=reshape(a',1,rw*col)
c=reshape(b,rw,col)

a=
        1                     1                     1
        2                     2                     2
        3                     3                     3
        4                     4                     4
        5                     5                     5

b=1,1,1,2,2,2,3,3,3,4,4,4,5,5,5


c =

                     1                     2                     4
                     1                     3                     4
                     1                     3                     5
                     2                     3                     5
                     2                     4                     5

Ps:我使用的是 Octave 4.0,它类似于 Matlab。

MATLAB 和 Octave 使用列优先排序,因此您需要考虑到这一点来重塑结果。数据将首先向下填充列,但您希望它首先填充。为此,您可以将列数指定为提供给 reshape 的行数,然后转置结果

c = reshape(b, 3, []).'

或更灵活

c = reshape(b, flip(size(a))).'