问题是:
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])