让我们从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);