问题是:
Product of known dimensions, 3, not divisible into total number of elements, 16.
这是因为我希望在reshape
矩阵中16x1
3x6
矩阵。问题是起始矩阵有16个元素,最终矩阵有18个。有没有一种聪明的方法可以重新整形并用0填充缺失的元素,直到元素的数量匹配为止?
当然,我需要一个独立于这些数字的通用方法,因为矩阵的大小可以改变。
TBN:0应位于矩阵的末尾
答案 0 :(得分:3)
您可以使用 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
如果您没有该工具箱,您可以使用基本功能来实现相同的目标 -
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])