如何在矩阵中找到非零行的索引?

3
如何在矩阵中找到非零行的索引?
示例:
A = [
       14  0  6  9  8  17
       85 14  1  3  0  99
       0   0  0  0  0   0 
       29  4  5  8  7  46
       0   0  0  0  0   0
       17  0  5  0  0  49
]

所需的结果:

   V =[1 2 4 6]
3个回答

4
您可以使用

标签


   ix = any(x,2);

any函数用于检测是否存在非零元素。第二个参数代表按行计算。

如果想要获取数值索引,可以使用find函数:

   numIx = find(ix);

另一种方法:
  ix = sum(abs(x),2)~=0;

1
不错,我不知道这个函数(any)。 - Nemesis
@Andrey:我认为我们应该添加另一行代码来查找V! - bzak
@bzak - 已添加到我的答案中。请注意,在大多数情况下,不需要数字索引。在这些情况下,Matlab甚至会发出警告(建议)。 - Andrey Rubshtein

2

使用

[i,~] = ind2sub(size(A),find(A));

v = unique(i);

以上矩阵的结果:

v = unique(i')

v =

     1     2     4     6

我的2009版Matlab出现了错误:??? [i,~] = ind2sub(size(A),find(A)) | 错误:括号不平衡或意外。 - bzak
2
我猜这是因为这个版本没有实现~(我猜的)。尝试使用[i,j] = ind2sub(size(A),find(A)); - Nemesis
对我来说很奇怪,但它确实有效。 - Nemesis
[i,j] = ind2sub(size(A),find(A))i = 1 2 4 6 2 4 1 2 4 6 1 2 4 1 4 1 2 4 6j = 1 1 1 1 2 2 3 3 3 3 4 4 4 5 5 6 6 6 6 - bzak

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接