【问题标题】:How to get Matrix from row-major vector in Matlab? [duplicate]如何从 Matlab 中的行主向量中获取矩阵? [复制]
【发布时间】:2016-05-26 17:26:56
【问题描述】:

我有以下矩阵:

50,60,55,67,70
62,65,70,70,81
72,66,77,80,69

我现在将矩阵转换为向量,但以行为主。这给出了以下向量:

50,60,55,67,70,62,65,70,70,81,72,66,77,80,69

现在我想把这个向量变成和上面一样的矩阵。问题是reshape(matrix,[3,5]) 不起作用,因为Matlab 操作column-major。

如何才能有效地做到这一点(对于大型矩阵)?

【问题讨论】:

  • 请再次检查您的示例,从向量中使用reshape(matrix,[3,5]) Matlab 会产生您在问题中的矩阵。
  • @Daniel 我已经编辑了我的示例,抱歉。

标签: matlab matrix row-major-order column-major-order


【解决方案1】:

要解决这个问题,请使用

reshape(matrix,[5,3]).'

首先使用 reshape 并交换行和列维度,你会得到一个顺序正确但转置的矩阵,然后使用 transpose 你得到正确的输出。

拥有控制系统工具箱,您也可以使用vec2mat

【讨论】:

  • 非常感谢。用 vec2mat 怎么做?对于大型矩阵,reshape 或 vec2mat 更有效吗?
  • 我假设没有速度差异,但我无法测试,因为我没有工具箱。数据必须在内存中重新排列,因此对于大型矩阵可能需要一些时间。
  • @machinery 如果您查看vec2mat 的代码,您会发现它有一些开销,然后调用reshape。所以reshape 必须更快
  • @LuisMendo:我认为它不能变魔术并且还需要转置?
  • @Daniel :-) 是的,我忘记了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多