如何在Matlab中使用reshape?

时间:2015-01-10 10:01:43

标签: matlab

我想通过imagesize * 1(列向量)重塑像素强度。

Imvect = reshape(I,imsize,1);

但为什么会出现这些错误?

Error using reshape
To RESHAPE the number of elements must not change.

1 个答案:

答案 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);