gpt4 book ai didi

matlab - 如何在不排序的情况下找到向量中 2 个最小元素的索引?

转载 作者:行者123 更新时间:2023-12-05 08:27:58 28 4
gpt4 key购买 nike

我试图找到 1xn 向量的两个最小元素。问题是我无法对它进行排序,因为索引线性依赖于值(因此对值进行排序将搞砸到原始索引)并且 0 可以是元素之一。此外,元素可以重复。这是我的代码的一个简化示例:

a = [1,5,8,7,1];

find(a==min(a))

ans =

1 5

对于a,这是我期待的答案。

b = [0,8,6,1,9];

find(b==min(b))

ans =

1

对于 b,我需要它找到 0 和 1,所以它应该分别为索引返回 1 和 4。提前致谢!

最佳答案

Phil Goddard 的回答完全可以接受。但是,您确实说过要在不排序的情况下执行此操作,所以我假设您根本不想使用 sort 函数。您可以做的是使用 min 两次。第一次调用它并找到最小元素的索引后,您可以将数组中的这个位置设置为 NaN,然后再运行一次 min。通过将位置设置为 NaN,您可以有效地跳过等于该时间点最小值的元素。第二次调用 min 后,您将获得第二小的元素。

之后您需要做的一件小事是在第一次 min 调用后清除您在数组中设置的 NaN。您可以通过提取第一次调用后的最小值以及该最小值所在的位置来执行此操作。第二次调用 min 后,您会将 NaN 中第一个最小值所在的位置重置回其原始值。

换句话说:

a = [1,5,8,7,1];
[min1,ind1] = min(a);
a(ind1) = NaN;
[~,ind2] = min(a);
a(ind1) = min1; %// Copy back to ensure we get original data back

ind1ind2 将包含 a 中两个最小值的位置。通过您的示例,我得到:

disp([ind1 ind2])

1 5

类似地,对于b,这是我们用上面的代码得到的:

disp([ind1 ind2])

1 4

关于matlab - 如何在不排序的情况下找到向量中 2 个最小元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25882114/

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