我想通过imagesize * 1(列向量)重塑像素强度。
Imvect = reshape(I,imsize,1);
但为什么会出现这些错误?
Error using reshape
To RESHAPE the number of elements must not change.
答案 0 :(得分:2)
让我们从documentation中使用的语法开始:
B = reshape(A,sz1,...,szN)
reshape
做的是取矩阵A
,将其拉直,然后给它一个新的大小,由第2,第3到第N个参数决定。为此,您需要在输入矩阵中具有与输出矩阵中相同数量的元素。您无法将1x5向量转换为2x3向量,因为缺少一个元素。输出矩阵中的元素数量将与sz1, sz2, ..., szN
的乘积成比例。现在,如果你知道你想要N行,但不知道你有多少列,你可以使用[]
语法,告诉MATLAB使用尽可能多的列来使元素数量为相等。
所以reshape(A, 2, [], 3)
将成为2xNx3矩阵,其中,对于具有24个元素的矩阵,N将为4.
现在,在你的情况下,情况并非如此。 numel(I) ~= imsize
。如果mod(numel(I), imsize) ~= 0
那么您的imsize
肯定是不正确的。但是,如果mod(numel(I), imsize) == 0
,那么您的错误可能是您需要imsize
行数,以及可以实现此目的的多个列。如果是后者,那么这应该有效:
Imvect = reshape(I,imsize, []);
如果您只是想让矩阵I
成为大小为(numel(I), 1)
的向量,那么您应该使用colon operator :
,因此:
Imvect = I(:);
如果你真的想使用reshape
,另一种方法是指定你想要一个列,让MATLAB选择行数,如下:
Imvect = reshape(I, [], 1);