如何使用逻辑索引和切片的组合在Matlab中“切割”矩阵?

我有一个类似于这个的矩阵M:

M = [   1, 2, 3, 0, 0;
        1, 2, 0, 0, 0;
        2, 3, 4, 5, 0;
        4, 5, 6, 0, 0;
        1, 2, 3, 4, 5;
    ]

我正在尝试使用A中每行的最右边非零值来获取列向量,但仅适用于具有第一列== 1的行.

我能够为行计算过滤器:

r = M( :, 1 ) == 1;
> r = [ 1; 1; 0; 0; 1 ]

我有一组索引“M中每行的最右边的非零值”:

> c = [ 3, 2, 4, 3, 5 ]

如何在A的切片中组合这些以获得我正在寻找的东西?我正在寻找类似的东西:

A( r, c )
> ans = [ 3; 2; 5 ]

但出于某种原因,这样做会让我得到3×3矩阵.

最佳答案 我能想到的最短路径如下:

% Get the values of the last non-zero entry per row
v = M(sub2ind(size(M), 1:size(M,1), c))

% Filter out the rows that does not begin with 1.
v(r == 1)
点赞