gpt4 book ai didi

matlab - find() 的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:44 25 4
gpt4 key购买 nike

我有这个矩阵:

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?

最佳答案

按照您的操作方式,您只会得到 1列索引,因为您只使用了 find 的第二个输出

[~, col] = find(a == 1)
% 1 1 2 4

当您将其用作 a 的索引时,它将把它们视为线性索引,并且仅将 a 中的第一个、第二个和第四个值更改为 0。在 column-major order 中执行线性索引所以这会导致您看到的输出。

要完成您想要做的事情,您需要find两个 输出来获取行和列索引,然后使用sub2ind 将这些转换为线性索引,然后您可以将其用于索引到 a

[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;

使用 find 的单一输出版本要容易得多,它直接返回线性索引并使用它。

ind = find(a == 1);
a(ind) = 0;

或者更好的是,只使用逻辑索引

a(a == 1) = 0;

关于matlab - find() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844980/

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