хранить индекс матрицы для минимума - PullRequest
0 голосов
/ 29 апреля 2011

у меня 2d матрица Ac(yr,j).
Я хочу сравнить каждое его значение с другим одномерным массивом и сохранить значение массива, для которого наступает абсолютный минимум.

for yr=1:32,  
   for j=1:12,  
       for in=1.5:1:32.5,  
            actin=Ac(yr,j);  
            kar(in-0.5)=abs(in-actin);  
            dab(yr,j)=min(kar(kar>=0));              
       end         
   end  
end  

Я могу найти наименее положительное значение, но не значение in, для которого оно подходит.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2011

ваш код нуждается в работе, и я предполагаю, что in - это массив, который вы хотите сравнить.

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

actin=Ac(yr,j);
kar = abs(in-actin)

последнее выражение меня озадачивает: kar всегда> = 0 (из функции abs), поэтому вам не нужно проверять это ... хуже того, он всегда вернет 1! так что вы всегда получите первый индекс кар. Вы пробовали:

dab(yr,j)=min(kar);

0 голосов
/ 29 апреля 2011

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

[~, dab(yr,j)] = min(kar(kar>=0));


Чтобы избавиться от вложенных циклов, вы можете попробовать arrayfun . Определите операцию, которая будет выполняться для каждого элемента массива.

function [index] = myMinFunction(value, data)
    [val, index] = min(abs(data - value));
end

Выполнить определенные операции.

dab = arrayfun(@(x)myMinFunction(x, in), Ac)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...