【问题标题】:How to use reshape in Matlab?如何在 Matlab 中使用 reshape?
【发布时间】:2015-01-10 10:01:42
【问题描述】:

我想通过 imagesize*1(column vector) 来重塑像素强度。

Imvect = reshape(I,imsize,1);

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

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

【问题讨论】:

  • imsize 的元素数量必须与I 相同
  • 嗨!答案是否有助于解决您的问题?如果是这样,请考虑通过单击答案左侧的复选标记来接受它。 =)

标签: matlab


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2023-03-20
    • 2012-06-19
    • 2019-04-25
    • 2019-12-09
    • 2011-08-17
    • 2011-04-23
    相关资源
    最近更新 更多