【问题标题】:understand how reshape function forms matrix了解重塑函数如何形成矩阵
【发布时间】:2014-06-10 10:11:22
【问题描述】:

让我们考虑以下矩阵进行说明

A=rand(6,3)

A =

    0.3500    0.8308    0.7537
    0.1966    0.5853    0.3804
    0.2511    0.5497    0.5678
    0.6160    0.9172    0.0759
    0.4733    0.2858    0.0540
    0.3517    0.7572    0.5308

在应用重塑功能后,我们总共有 6*3=18 个元素

reshape(A,2,9)

ans =

0.3500    0.2511    0.4733    0.8308    0.5497    0.2858    0.7537    0.5678    0.0540
0.1966    0.6160    0.3517    0.5853    0.9172    0.7572    0.3804    0.0759    0.5308

很明显,如果我们查看原始数组,那么我们可以很容易地看到这些新矩阵的行与

B=A(:)'

B =

  Columns 1 through 9

    0.3500    0.1966    0.2511    0.6160    0.4733    0.3517    0.8308    0.5853    0.5497

  Columns 10 through 18

    0.9172    0.2858    0.7572    0.7537    0.3804    0.5678    0.0759    0.0540    0.5308

>> B(1:2:18)

ans =

    0.3500    0.2511    0.4733    0.8308    0.5497    0.2858    0.7537    0.5678    0.0540

所以在 reshape(A,m,n) 中,m*n 必须是总元素,m 表示从第一列中的第一个元素开始,在列中递增直到第 n 个元素?也是当我尝试过时

reshape(A,3,4)
Error using reshape
To RESHAPE the number of elements must not change.

它给了我错误,所以每当我选择 n,m 必须是数组中的元素数除以 n 对吗?提前谢谢

【问题讨论】:

  • 是的,n*m 必须等于 numel(A)。但是您也可以这样做:reshape(A,3,[]) 并让reshape 自动选择您使用[] 的维度的大小。
  • 你的问题到底是什么?
  • 同样可以用 reshape(A,[],3) right
  • m 和 n 在 reshape(A,m,n) 中的作用以及它们的工作原理
  • 不值得投反对票,但对我来说重要的是知识

标签: matlab matrix reshape


【解决方案1】:

Matlab 按列存储其矩阵。这意味着在内部它基本上只是一个所有列都连接在一起的数组。矩阵的形状单独存储。

我不太明白您的最后一个问题,因为您的矩阵 A 有 18 个条目,但您尝试将其重塑为具有 3*4=12 个条目的矩阵

希望对你有帮助

【讨论】:

  • 这是我的另一个问题,如果 m*n 必须等于总元素
【解决方案2】:

Reshape 用于重新排序元素,如@alex answer 中所述(当然元素的数量不能改变!)。如果您想调整大小矩阵,请使用indexing

示例

A = rand(6,6) % Start matrix

A =

    0.0113    0.5362    0.3510    0.7220    0.2084    0.8344
    0.5013    0.9770    0.5221    0.5743    0.8442    0.8102
    0.1214    0.0390    0.9594    0.1385    0.9038    0.6081
    0.2480    0.9165    0.1986    0.3692    0.5135    0.6154
    0.3631    0.9843    0.3697    0.5964    0.6437    0.6901
    0.9978    0.8182    0.1990    0.8273    0.6811    0.2464

使用 '[]' 删除行或列

A(2:3, :) = [] % This removes 2nd and 3rd lines
A(:, [2 5]) = [] % This further removes 2nd and 5th columns

A =

    0.0113    0.3510    0.7220    0.8344
    0.2480    0.1986    0.3692    0.6154
    0.3631    0.3697    0.5964    0.6901
    0.9978    0.1990    0.8273    0.2464

使用索引填充零

AA = zeros(6, 6); % Build larger matrix the size you want ...
AA([1 2 4 6], [2 3 5 6]) = A % Place elements of `A` inside `AA` as you wish ... 

AA =

     0.0000   0.0113   0.3510   0.0000   0.7220   0.8344
     0.0000   0.2480   0.1986   0.0000   0.3692   0.6154
     0.0000   0.0000   0.0000   0.0000   0.0000   0.0000
     0.0000   0.3631   0.3697   0.0000   0.5964   0.6901
     0.0000   0.0000   0.0000   0.0000   0.0000   0.0000
     0.0000   0.9978   0.1990   0.0000   0.8273   0.2464

通过索引,您还可以创建更大/更小的矩阵。

A([4 4 1 1 2 3], end:-1:1)

ans =

    0.2464    0.8273    0.1990    0.9978
    0.2464    0.8273    0.1990    0.9978
    0.8344    0.7220    0.3510    0.0113
    0.8344    0.7220    0.3510    0.0113
    0.6154    0.3692    0.1986    0.2480
    0.6901    0.5964    0.3697    0.3631

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多