使用/不同的开始/结束元素编号重新排列行

时间:2014-12-15 14:40:23

标签: matlab matrix reshape

问题是:

Product of known dimensions, 3, not divisible into total number of elements, 16.

这是因为我希望在reshape矩阵中16x1 3x6矩阵。问题是起始矩阵有16个元素,最终矩阵有18个。有没有一种聪明的方法可以重新整形并用0填充缺失的元素,直到元素的数量匹配为止?

当然,我需要一个独立于这些数字的通用方法,因为矩阵的大小可以改变。

TBN:0应位于矩阵的末尾

3 个答案:

答案 0 :(得分:3)

方法#1

您可以使用 vec2mat 通信系统工具箱的一部分,假设A为输入向量 -

ncols = 6; %// number of columns needed in the output
out = vec2mat(A,ncols)

示例运行 -

>> A'
ans =
     4     9     8     9     6     1     8     9     7     7     7     4     6     2     7     1
>> out
out =
     4     9     8     9     6     1
     8     9     7     7     7     4
     6     2     7     1     0     0

方法#2

如果您没有该工具箱,您可以使用基本功能来实现相同的目标 -

out = zeros([ncols ceil(numel(A)/ncols)]);
out(1:numel(A)) = A;
out = out.'

答案 1 :(得分:2)

您还可以预先分配一个零向量,在数据中填入与向量中一样多的元素,然后在完成后重新整形:

vec = 1:16; %// Example data
numRows = 6;
numCols = 3;
newVec = zeros(1:numRows*numCols);
newVec(1:numel(vec)) = vec;
newMat = reshape(newVec, numRows, numCols);

答案 2 :(得分:1)

您应该在开头添加零。我的意思是:

vec      = [1:16]'
nRow     = 3;
nCol     = 6;
zeroFill = nRow * nCol - length(vec);
newVec   = [vec; zeros(zeroFill, 1)];
mat      = reshape(newVec, [nRow nCol])