Scilab,获取向量中最大元素的最后一个索引

时间:2014-01-06 08:27:55

标签: scilab

给定一个向量,A=[1,2,10,10,10,1][m,k]=max(A)返回k = 3。 如何获取最大元素的最后一个索引?在这个例子中,我想得到5。

我能想到的最简洁的方式是:[m,k]=max(A($:-1:1))

是否有更好的方法或scilab提供参数来执行此操作?反转大顶点无论如何都不是一个好主意。

1 个答案:

答案 0 :(得分:2)

使用find命令

您可以使用find命令获取最大值的所有索引:

indices = find(A==max(A))
last = max(indices)

自己实施

或者,如果您想要一次通过,您可以自己实施:

//Create a c-function with your wanted behaviour
f1=['void max_array(int in_array[],int* in_num_elements,int *out_max, int *out_index)'
    '{' 
    'int i;'
    '*out_max=in_array[0];'
    '*out_index=-1;'
    'for (i=0; i<*in_num_elements; i++)'
    '{' 
        'if(in_array[i]>=*out_max)'
        '{'
             '*out_max=in_array[i];'
             '*out_index=i;'
        '}'
      '}'
 '}'];

//Place it in a file in the current directory
mputl(f1,'max_array.c')

//Create the shared library (a gateway, a Makefile and a loader are
//generated.
ilib_for_link('max_array','max_array.c',[],"c")

//Load the library
exec loader.sce

//Create wrapper for readability
function [m,k] = last_max(vector)
    [m, k] = call('max_array', vector, 1,'i', length(vector),2,'i', 'out',[1,1],3,'i',[1,1],4,'i');
    // Because c is zero-indexed add 1
    k = k + 1
endfunction

//Your data
A=[1,2,10,10,10,1];

//Call function on your data
[m,k] = last_max(A)
disp("Max value is " + string(m) + " at index " + string(k) )