重塑功能应该改变矩阵的形状。 但如果我尝试使用它(它也写在手册中),我发现如果我声明: 重塑(A,M,N); 那么A必须有m行和n列。 如果我尝试使用reshape传递作为与这些不同的参数数字,我会收到错误。 所以很明显,它不会重塑任何矩阵,如果我将m和n作为参数传递,它只返回相同的矩阵,否则返回错误。 所以,如果我有一个4x4矩阵,我想让它变小:2x2,我不能。
答案 0 :(得分:6)
它会更改形状,而不是数组的 size 。要更改形状,元素的数量不得更改。所以如果你有4x4你可以去8x2或2x8或16x1等但不是2x2(你期望在其他元素上发生什么?)
答案 1 :(得分:4)
重塑重新排列元素;如果您执行B = reshape(A, u)
,则逻辑B必须具有相同数量的元素(请注意size(B) == prod(u)
)为A(length(B(:)) == length(A(:))
)。否则,如果A有更多,那么它将如何知道要丢弃哪些元素,如果B有更多,它将在哪里获得新元素?
重塑有用的一种情况是,由于某种原因,你的方阵被展开到一个向量中(可能是由另一个函数),你只需要将它重新安排回以前的形式。
如果要获取矩阵的较小部分,请使用A(i1:i2, j1:j2)
。如果要“平铺”矩阵,请使用repmat(A, i, j)
。
答案 2 :(得分:2)
正如@thrope所说,reshape
改变了形状,而不是元素的数量。如果你有一个4x4矩阵并且想要它的左上角2x2,请使用B=A(1:2,1:2)
或右下角2x2角,B=A(3:4,3:4)
。