2014-11-26 2 views
0

У меня есть вектор:максимум разности значений вектора

A = 
    0.5743 
    -0.3167 
    0.0591 
    -0.2576 
    0.0000 
    0.2576 
    -0.0591 
    0.3167 
    -0.5743 

Я хочу, чтобы сохранить различия между каждым значением массива А в массив или в матрице, и найти максимальную разницу значение и выводить индексы (т. е. v (1) - v (3) дает максимум, например), который дает максимум. У кого-нибудь есть предложения?

ответ

2

Это то, что вы хотите?

d = abs(bsxfun(@minus, A, A.')); %'// compute all differences 
[~, ind] = max(d(:)); %// find linear index of maximum difference 
[row, col] = ind2sub([numel(A) numel(A)], ind); %// convert to row and column 

искомых показателей задаются переменными row, col. Разностная матрица равна d.

В качестве альтернативы, первая линия может быть заменена

d = squareform(pdist(A)); 
+1

Это то, что я бы тоже сделал ... особенно 'pdist' - +1. – rayryeng

+0

@rayryeng Но 'bsxfun' тоже классно ... и' pdist' требует Инструментарий статистики :-) –

+0

Извините, я новичок в MATLAB. Я запустил код и получил ошибку: индексирование не может дать несколько результатов. – user2147241

1

Я не думаю, что вам нужно вычислить все различия. Вам просто нужно найти максимум и минимум и вычесть.

[max_val, max_ind] = max(A(:)); 
[min_val, min_ind] = min(A(:)); 
disp(['Max difference is ', num2str(max_val - min_val), ' which is the difference between indicies ', num2str(max_ind), ' and ', num2str(min_ind)]); 
+0

Хороший улов !! +1 –

+0

Можно ли продолжить, чтобы найти минимальное значение? Кроме того, как насчет минимума разности квадратов? ((A (1) - A (2))^2 и т. Д.). Я думаю, нам нужно найти самые большие два или самые маленькие два и вычесть их, и взять квадратный корень из него. Есть ли еще более простой способ сделать это? – user2147241

Смежные вопросы