使用 octave / matlab 重塑和重新排列数组
reshaping and re-arranging array using octave / matlab
我正在尝试重塑数组,执行操作,然后将其重塑回原始状态。请参阅我试图获得的输出示例。我可以得到 a
和 b
但我很难让 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
我可以获得变量 a
和 b
但我不确定如何将 c
从 b
重塑为 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))).'
我正在尝试重塑数组,执行操作,然后将其重塑回原始状态。请参阅我试图获得的输出示例。我可以得到 a
和 b
但我很难让 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
我可以获得变量 a
和 b
但我不确定如何将 c
从 b
重塑为 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))).'