【问题标题】:Matlab find the smallest number within variablesMatlab找到变量中的最小数字
【发布时间】:2023-03-18 00:19:01
【问题描述】:

假设我有 10 个变量,其中有不同的数字(num1 = 0.4123,num2 = 0.6223,num3 等)。我怎样才能找到具有最小数字的变量?我需要使用递归循环还是有什么简单的方法可以做到?

【问题讨论】:

  • 将它们放在一个数组中并使用min
  • 将所有这些变量作为数字向量的条目会更好:num = [0.4123 0.6223] 等。然后您可以使用 [~, result] = min(num) 来获取 arg min

标签: matlab


【解决方案1】:

用不同的变量名描述一堆数字是很糟糕的。我建议按照@LuisMendo 的建议进行操作,并将它们全部放入一个数组中。

但是,如果您不想将所有这些数字打入单个数组中,您可以作弊并保存所有以 num 开头的变量,然后将其加载回 MATLAB 中的一个结构中。通过将结构转换为元胞数组,然后将其转换为数值数组,将其转换为数组。

一旦你这样做了,请使用他正在谈论的min 电话。换句话说:

save('temp.mat', 'num*'); %// Save all variables with num from workspace to file
s = load('temp.mat'); %// Reload back in as a structure
vals = cell2mat(struct2cell(s)); %// Convert from structure to numeric array
[~,idx] = min(vals); %// Find value that was the minimum
f = fieldnames(s); %// Get all of the variable names
disp(f{idx}); %// Display the variable that has the minimum

idx 将是导致最小值的数字。如果要显示导致最小值的变量的实际名称,可以使用fieldnames 从结构中检索所有变量的列表,然后用最小值索引到该列表中以获得结果。

或者,如果你能忍受打字,就这样做:

vals = [num1 num2 num3 num4 num5 num6 num7 num8 num9 num10];
[~,idx] = min(vals);
disp(['num' num2str(idx)]);

如果您有很多变量要查找min,则第一种方法会更好。如果是这种情况,您应该考虑将所有值放在一个数组中并重新编写您的代码。在您的代码中声明大量变量使其难以管理。

【讨论】:

  • 好主意!可能会节省很多时间
【解决方案2】:

将所有这些变量都作为数值向量的条目会更好:

 num = [0.4123 0.6223];

然后你会使用

[~, result] = min(num);

获取最小元素的索引。

【讨论】:

  • 给你加 1 :) 原来是你的主意!
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2014-08-06
  • 2011-10-31
相关资源
最近更新 更多