【问题标题】:How can I index the diagonals of a 3-D matrix in MATLAB?如何在 MATLAB 中索引 3-D 矩阵的对角线?
【发布时间】:2011-08-01 17:13:18
【问题描述】:

我有一个 M×M×N 矩阵,它是 N 个 M×M 矩阵的串联。我想通过获取每个 M×M 子矩阵的对角线并将它们连接在一起来将此矩阵简化为 M×N 矩阵。如何以简单的矢量化方式做到这一点?

【问题讨论】:

  • 嗯,我以为我以前回答过类似的问题,但我花了一些时间才找到它:changing diagonals to 1 in a 4 dimensional matrix in matlab。尽管存在细微差别(赋值与索引,3-D 与 4-D),但答案足够笼统,可能会被认为是重复的问题。也许对标题和标签进行改进是为了让这些更容易找到(我发现自己最近经常这么说)。
  • 很多问题都是根据提问者的需求来描述的(例如,我怎样才能从 blah blah 中计算出浓度),但本质上是矩阵操作问题。我建议在询问者满意后稍后清理它们,使其更通用(即剥离特定需求并将其修剪成裸露的骨头)。事实上,这将有助于人们更轻松地寻找答案,并有希望减少受骗,因为在大多数情况下,混淆是由于问题的措辞方式造成的。
  • @R. M.:我已经进行了一些编辑,使标题和标签更清晰,希望在搜索此类矩阵操作问题时能更好地显示出来。
  • @R. M., gnovice:从提问者的角度来看,尤其是。像我这样对 Matlab 和线性代数不熟悉的人,如何识别问题中隐藏的主题?换句话说,我怎样才能识别出可以使用哪些基本矩阵操作操作来实现我的目标?非常感谢
  • 如果您阅读了该问题的第一个版本,您会发现其要点是“如何选择 3D MxNxN 矩阵的对角线”,这样会更准确标题而不是“如何减少尺寸”,这也可能意味着从 MxN 减少到一些 MxKLxK,因此是模棱两可的。至于要使用什么矩阵操作,这来自实践,SO 是提出此类问题的绝佳场所。我和 gnovice 讨论的是 re:编辑问题,让新手更容易搜索和找到答案。

标签: matlab indexing multidimensional-array matrix diagonal


【解决方案1】:

您可以通过获取对角线的线性索引并使用它来形成一个新矩阵来做到这一点

[M,~,N]=size(A);%# A is your matrix
indx=cumsum([1:(M+1):M^2; M^2.*ones(N-1,M)]);%#diagonal indices

B=A(indx');%'# transpose to get MxN

在上面,我使用了~ 来忽略函数的输出。但是,这仅在您使用 MATLAB R2009b 及更高版本时才有效。如果您的版本早于此,请改用虚拟变量。

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2011-03-25
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多