使用不同的开始/结束元素编号逐行重塑



问题是:

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

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

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

TBN:0 应位于矩阵的末尾

方法 #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.'

您还可以预先分配一个零向量,为向量中尽可能多的元素填充数据,然后在完成后对其进行重塑:

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

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

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

最新更新