gpt4 book ai didi

matlab - 在 MATLAB 中索引矩阵的所有对角线

转载 作者:行者123 更新时间:2023-12-01 13:46:17 32 4
gpt4 key购买 nike

我正在尝试在 matlab 中索引(而不是获取)矩阵的对角线。

假设我有一个矩阵“M”,即 n 乘 n。然后我想获得矩阵“M”中所有可能对角线的所有索引。

我知道中心对角线由

M(1:(n+1):end)

及其上方的所有对角线都被索引为:

M((1+1*n):(n+1):end)
M((1+2*n):(n+1):end)...
M((1+n*n):(n+1):end)

现在我也想得到下面的对角线。然而,我这辈子都想不出怎么做。

可重现的例子:

rng(1); % set seed
n = 4;
M = rand(n);

屈服

M =

0.562408 0.947364 0.655088 0.181702
0.960604 0.268834 0.469042 0.089167
0.578719 0.657845 0.516215 0.419000
0.226410 0.601666 0.169212 0.378740

我想索引下对角线的地方,例如下对角线:

0.960604 0.657845 0.169212

也就是说,我不需要通过例如diags 函数,但访问索引(因为我最终想用对角线替换矩阵条目对角线)。

最佳答案

正如您已经注意到的,您可以使用 diag函数获取主对角线和主对角线上方或下方的其他对角线,

M = magic(4)    % Test data
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

diag(M, -1)
ans =
5
7
15

但您不能使用 diag 函数为对角线赋值:

diag(M, -1) = [3; 2; 1]
Index in position 2 is invalid. Array indices must be positive integers or logical values.

相反,我们可以使用 logical indexing通过使用相同大小的逻辑矩阵索引数组 M。我们可以使用 diag 函数轻松创建此矩阵,方法是创建一个在指定对角线上包含 1 的对角矩阵:

diag(ones(1, 3), -1)
ans =
0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0

要将此矩阵用于逻辑索引,我们需要使用 logical 将其从 double 转换为逻辑矩阵功能。

M(logical(diag(ones(1, 3), -1)))
ans =
5
7
15

或者给它分配新的值

M(logical(diag(ones(1, 3), -1))) = [99, 98, 97]
M =
16 2 3 13
99 11 10 8
9 98 6 12
4 14 97 1

关于matlab - 在 MATLAB 中索引矩阵的所有对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57455883/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com