【问题标题】:How do I resize a matrix in MATLAB?如何在 MATLAB 中调整矩阵的大小?
【发布时间】:2010-10-22 01:40:35
【问题描述】:

假设我有一个 1×12 矩阵,我想将其调整为 4×3 矩阵。我怎么能这样做?

我目前的解决方案有点丑:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: matlab matrix reshape


    【解决方案1】:

    reshape 当然是正确的解决方案,正如@gnovice 所述。

    reshape 的一个不错的功能是它允许这样做:

    A = 1:12;
    B = reshape(A,4,[]);
    B =
         1     5     9
         2     6    10
         3     7    11
         4     8    12
    

    因此,如果您不知道会有多少列,reshape 将为您计算。同样,reshape 将填写行数,如果您省略的话。

    C = reshape(A,[],4)
    C =
         1     4     7    10
         2     5     8    11
         3     6     9    12
    

    【讨论】:

    • +1:很好!事实上,我以前从未注意到这一点。我想我从来不用它。
    【解决方案2】:

    试试RESHAPE函数:

    A = (1-by-12 matrix);
    B = reshape(A,4,3);
    

    请注意,矩阵 B 将以列方式填充来自 A 的元素(即,列将从上到下填充,从左到右移动)。

    例子:

    >> A = 1:12;
    >> B = reshape(A,4,3)
    
    B =
    
         1     5     9
         2     6    10
         3     7    11
         4     8    12
    

    【讨论】:

    • 请注意,如果 A 不具有正好 4*3 的元素,则 reshape 会返回错误。
    • 是的,这是 RESHAPE 的正常预期行为。
    • 如果没有正好 4*3 的元素,我们不能告诉 RESHAPE 添加零吗?我的意思是如果元素少于 12 个。
    • @Nadeeshani:不,但你可以这样做:A = 1:11; B = zeros(4,3); B(1:numel(A)) = A;
    • @Boggartfly:是的,这将按列填充B。如果你想按行填充,我会这样做:A = 1:11; B = zeros(3,4); B(1:numel(A)) = A; B = B.';
    【解决方案3】:

    扩展gnovice的解决方案:

    如果您需要不同的矩阵构造顺序,请在调用reshape() 后使用转置(' 运算符)或permute() 更改维度顺序。

    【讨论】:

    • +1:关于转置和 PERMUTE 的要点。这些有时在重塑后需要。
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2014-06-16
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多