我有这个矩阵:
a = [1 2 2 1; 1 1 2 2]
% 1 2 2 1
% 1 1 2 2
我想找到所有1并将它们归零。
[~, a_i] = find(a == 1);
a(a_i) = 0
% 0 2 2 1
% 0 0 2 2
为什么第一排还有1?
答案 0 :(得分:7)
您正在使用1
的第二个输出,因此您只能获得find
的列索引。 }。
[~, col] = find(a == 1)
% 1 1 2 4
当您将其用作a
的索引时,它会将这些视为线性索引并仅将a
中的第1,第2和第4个值更改为{{1} }}。线性索引在column-major order中执行,因此这会导致您看到的输出。
要执行您尝试执行的操作,您需要两个输出0
以获取行和列索引,然后使用find
转换这些到一个线性索引,然后你可以用它来索引sub2ind
。
a
使用[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;
的单输出版本更容易,它直接返回线性索引并使用它。
find
或者更好的是,只需使用逻辑索引
ind = find(a == 1);
a(ind) = 0;