给定一个向量,A=[1,2,10,10,10,1]
,[m,k]=max(A)
返回k = 3。
如何获取最大元素的最后一个索引?在这个例子中,我想得到5。
我能想到的最简洁的方式是:[m,k]=max(A($:-1:1))
是否有更好的方法或scilab提供参数来执行此操作?反转大顶点无论如何都不是一个好主意。
答案 0 :(得分:2)
您可以使用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) )