我在matlab中有一个m by n矩阵,希望找到每个反对角线元素的索引(行、列)。例如,对于4x3矩阵,我希望有以下索引:
antidiag1 = (1,1)
antidiag2 = (2,1) , (1,2)
antidiag3 = (3,1) , (2,2), (1,3)
antidiag4 = (4,1) , (3,2), (2,3)
antidiag5 = (4,2) , (3,3)
antidiag3 = (4,3) 在上面的示例(m,n)=(row, column)中。为了说明我所说的反对角线元素的含义,请参阅下面的矩阵,其中红线是反对角线。

如何找到指数?
发布于 2022-10-24 02:18:48
下面的脚本是这个问题的解决方案,适用于正方形和矩形二维矩阵。
clear all;close all;clc
A1=randi([-10 10],3,4)
sz1=size(A1)
nA2=reshape([1:1:prod(sz1)],sz1)
nd=sum(sz1) % amount diagonals
C1={} % init result cell
for k=-floor(nd/2):1:floor(nd/2)
a2 = diag( flip(nA2, 2), k )
[row,col]=ind2sub(sz1,a2)
C1={C1{:} [row col]}
end
C1(1)=[] % sought indexes
for k=1:1:size(C1,2)
C1{k}
end解决方案包含在单元格C1中。
在MATLAB中读取单元元素的实际内容,使用花括号索引,如下所示
C1{1}
=
3 4
C1{2}
=
2 4
3 3
C1{3}
=
1 4
2 3
3 2使用常规括号进行索引时,MATLAB返回所查找的元素,但在单元格类型中返回。
C2(2)
1×1 cell array
{2×2 double}若要访问解决方案索引的单个对,请使用以下符号
C1{3}(1,:)
=
1 4
C1{3}(2,:)
=
2 3
C1{3}(3,:)
=
3 2可以生成实际变量antidiag1 antidiag2 .带evalin命令
https://stackoverflow.com/questions/74171081
复制相似问题