【发布时间】:2014-11-15 06:19:45
【问题描述】:
我正在使用 reshape 函数处理矩阵。我有一个矩阵大小990 x 8。首先,我将其重塑为A x 400,其中 A 将被确定为 s.t 990x8 可被 400 去除。因此,我们必须添加 80 个零作为填充。所以,A是
(990+10)/400=200
我的新矩阵是20 x 400。现在我在 A 中将一行设置为错误行。第二步,我想用该行错误恢复我的原始矩阵大小 990 x 8。所以,数字行错误将是
400/8=50 rows
看下图就很清楚了。现在我想通过matlab代码来实现这个方案。让我们看看我的实现如下。但是,它与我的目标不同。它在单个行中出现了一些 -1(例如:[0 0 -1 0 0 ..],真正的答案必须是 [0 0 0...] 或 [-1 -1 -1..] 因为如果没有行error 将仅包含 0 或 1,并且错误行仅包含 -1 值)。请修复帮助我
bitstream = reshape( orignalPacket.', [],1); %size 990 x 8
%% Add padding
bitstream(end+80)=0; % add zeros padding at the end
%% New matrix 20 x 400
newmatrix= reshape( bitstream.', [],psize);
%% Add one error row
newmatrix(5,:)=-1; %row 5th is error
%% Recovery to orignal packet
bitstream_re = reshape( newmatrix, [],1);
bitstream_re(end-80+1:end)=[];%% Remove padding
matrix_re=reshape(permute(reshape(bitstream_re,size(bitstream_re,2),8,[]),[2 1 3]),8,[]);
matrix_re=matrix_re'; %Recovery matrix-
【问题讨论】:
-
第三步是零填充假设被限制为一行?所以最后一行是 320 + padding?
-
+1 表示努力解释,这几天很少见。
-
@Ayb4btu:添加了 80 个零填充,这意味着 10 行,先生。因为原始矩阵的总行(行)不能被 400 去除
-
@user8264 在您的图表中,我了解第二步中显示的 10 行填充的需要。但是 reshape (取决于转置)会将所有零放在最后 4 列中,或者每 50 列放置半列。第三步暗示你想要最后一行的填充。对于图表中的第三步,您希望在哪里进行填充?
-
对不起,我认为这是行尾。因为我认为原始填充在末尾,所以在重塑后,它仍然会在矩阵的末尾。有什么错误吗?