C++
это мой вызов функцииMatlab на C++ преобразование кода
int gr_tperctile = tprctile(channel_gr, sizeOfChannel, 0.2);
это функция я написал
int Detection::tprctile(int* gr, int sizeOfChannel, double pt)
{
qsort(gr,sizeOfChannel, sizeof(int),compare);
int ptInd = floor((pt/100 * sizeOfChannel) +0.5);
return gr[ptInd];
}
int compare(const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
MATLAB
это оригинальный вызов функции
toolbox.c3d.p.tprctile(Gr(:),0.2)
это оригинальная функция
function val = tprctile(data, pt)
data = sort(data);
ptInd = round(pt/100 * length(data));
val = data(ptInd);
Я не уверен, о моей реализации и опробовал его на ограниченное количество примеров. Может кто-нибудь скажет мне, если это правильно? или лучший способ реализовать matlab
у вас может быть ошибка при доступе к массиву данных; C++ использует индексирование на основе 0, основанное на MATLAB 1. – Amro
также, если вы хотите вернуть n-й процентиль некоторых данных, есть функция для этого ['prctile'] (http://www.mathworks.com/help/stats/prctile.html) – Amro
@Amro: Возможно, у него нет панели инструментов статистики или не требуется интерполяция между образцами. –