最小值和最大值的八度代码以及查找索引

Posted

技术标签:

【中文标题】最小值和最大值的八度代码以及查找索引【英文标题】:Octave Code for Minimum and Max and finding index 【发布时间】:2020-09-12 13:02:30 【问题描述】:

大家好, 我一直在尝试编写此程序以查找 行向量 中的最大值和最小值,但在分配它们的维度时遇到了问题 indexes 我不知道出了什么问题 C 和 D 始终显示为“1” 我是初学者,你能帮帮我吗

function [low,high,index1,index2] = Q1(x)
low = x(1);
high = x(1);
  index1 = x(1,2);
  index2 = x(1,2);
    for i = 2:length(x),
        if x(i) < low,
            low = x(i);
        index1 = find(low);
        elseif x(i) > high,

        high = x(i);
    index2 = find(high);

endif;
    endfor;
endfunction

【问题讨论】:

如果low 是一个标量,那么find(low) 将始终返回1,除非low 是0,在这种情况下它返回一个空数组。你需要做index1=i,另一个也一样。 你打算用x(1,2)做什么?如果 x 是向量,则应始终使用单个索引来寻址,如 x(i)。一般来说,显示一组数据和预期结果总是更好 我希望 index1 和 index2 作为 (1,2) 矩阵的输出,指示 Low 和 High 变量值的位置。 我做了 index1=i 的事情,没有任何改变。 您在问题中提到的“C 和 D”是什么?你那里没有C和D。另外,请提供一个样本输入 x 和输出 [low, high, index1, index2] 您希望从该集合中获得。 【参考方案1】:

index1index2 应以 1 开头,因为 lowhigh 应以元素 x(1) 开头。当您检测到条件时,将x(i) 分配给值,将i 分配给relative index

function [low,high,index1,index2] = Q1(x)
low = x(1);
high = x(1);
index1 = 1;
index2 = 1;
    for i = 2:length(x),
        if (x(i) < low)
            low = x(i);
            index1 = i;
        elseif (x(i) > high)
            high = x(i);
            index2 = i;
        endif
    endfor;
endfunction

使用随机数据进行测试

octave:1> x=rand(10,1)
x =

   0.90588
   0.20695
   0.46777
   0.67169
   0.69547
   0.24960
   0.16570
   0.62231
   0.18489
   0.36467

octave:2> Q1(x)
ans =  0.16570
octave:3> [low,high,index_low,index_high]=Q1(x)
low =  0.16570
high =  0.90588
index_low =  7
index_high =  1

【讨论】:

非常感谢。正是我需要的。 你应该接受答案 ;-) 。问题:您正在学习哪门课程? 抱歉 .. 新来的 :D 。 EDX 平台上面向初学者的 MATLAB 和 Octave EPFLx。 也许您能在 BFH web.sha1.bfh.scienceweb.sha1.bfh.science/Labs/PWF/Documentation/OctaveAtBFH.pdf 找到有用的 Andreas Stahel 教授的资料【参考方案2】:

使用minmax 函数,您的函数似乎可以在没有循环的情况下非常快速地完成。假设x 是一个行向量:

>> x = [8 4 9 7 6 4 2 3 5 6] 
x =
   8   4   9   7   6   4   2   3   5   6

>> [min_x, min_x_loc] = min (x)
min_x =  2
min_x_loc =  7

>> [max_x, max_x_loc] = max (x)
max_x =  9
max_x_loc =  3

如果你想把它放在一个函数中,使用你的符号:

function [low, high, index1, index2] = Q1(x)
  [low, index1] = min (x);
  [high, index2] = max (x);
end

(不是必须的,但使用end 代替endfuntion 确实保留了matlab 兼容性)

【讨论】:

我的工作是在不使用内置操作的情况下找到最小值和最大值。我还必须显示这个值的索引号,它由两个数字组成(列的行数) 你说输入是一个行向量。所以 row 永远是 1。

以上是关于最小值和最大值的八度代码以及查找索引的主要内容,如果未能解决你的问题,请参考以下文章

查找熊猫索引数据帧的最小值和最大值

如何找到int数组Python的最小值和最大值的索引[重复]

Javascript:使用 reduce() 查找最小值和最大值?

查找金属纹理中的最小值和最大值

查找每行的最小值和最大值,不包括 NaN 值

在 Vba 列的范围内查找最小值和最大值