如何在 MATLAB 中索引 3-D 矩阵的对角线?

发布于 2024-10-31 09:25:27 字数 102 浏览 5 评论 0原文

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

I have an M-by-M-by-N matrix, which is a concatenation of N M-by-M matrices. I want to reduce this matrix to an M-by-N matrix by taking the diagonals of each M-by-M submatrix and concatenating them together. How can I do this in a simple vectorized way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

还如梦归 2024-11-07 09:25:27

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

[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 及更高版本时才有效。如果您的版本比该版本旧,请改用虚拟变量。

You can do it by getting the linear indices of the diagonals and using it to form a new matrix

[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

In the above, I've used ~ to disregard that output from the function. However, this works only if you're using MATLAB R2009b and above. If your version is older than that, use a dummy variable instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文