【发布时间】:2021-04-08 08:08:23
【问题描述】:
在 Matlab 中给定一个非正方形的 mx2 矩阵,其中行维度发生变化(它会发生变化,因为它在存储我正在做的一些计算的结果的 for 循环中运行)我们如何获得对角线上的镜像?
例如,给定 3x2
U1 =
11 12
21 22
31 32
矩阵,我们如何得到
U2=
11 21
12 31
22 32
这个矩阵?
在一般情况下,我们寻求从(其中两个数字表示每个元素的行/列索引 - 即 U_ij:=ij 以使其更清晰)。
U = 11 12
21 22
31 32
...
(r-1)1 (r-1)2
r1 r2
到
V = 11 21
12 31
22 41
...
(r-2)2 r1
(r-1)2 r2
我明白对于给定的行大小,例如上面 m=3 的行,我可以简单地设置U2 = [U1(1,2) U1(2,1); U1(1,2) U1(3,2); U1(2,2) U1(3,2)],使左上和右下元素保持不变,而其他元素以对角线方式交换位置,其中第一列元素与第二列上的一个和它上方的一个位置交换位置。但是当 m 变化时我无法动态地执行此操作。
我尝试过结合使用索引和命令,例如 circshift 和 Flip,但无济于事。
注意
如果给定的矩阵是方阵,很容易看出所需的矩阵是我们得到的转置矩阵
A = A' 但我正在研究的情况并非如此。
【问题讨论】:
-
不清楚你是如何在数学上为非方阵定义这个“镜像”的,你能edit你的问题包括一个(稍微)更大的例子,理想情况下你的算法'重新使用,即使只是目前在您的脑海中,以实现预期的输出?例如,有人可能期望
31(U1中的左下角)移动到U2中的右上角,但在您的示例中并非如此 -
@Wolfie 谢谢你的评论。我进行了相应的编辑以使其更清晰。简而言之,只有左上角和右下角的元素保持不变。所有其他都以对角线方式交换位置,其中第一列元素与第二列上的元素交换位置,并且在它上方的一个位置。
-
您是否只想像
U(2:end, 1) = U(1:end-1, 2)一样将元素从一列移动到另一列,另一列也类似?还是我理解不正确? -
大概
32在你的新V应该是41? -
@Wolfie 是的,已更正。感谢您的时间和回答。