сохранить индекс матрицы для минимума

#matlab #matrix

#matlab #матрица

Вопрос:

У меня есть 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 , для которого оно подходит.

Комментарии:

1. есть ли какая-либо причина, по которой вы индексируете как 1.5-0.5 , 2.5-0.5 , … вместо просто 1,2,3...

Ответ №1:

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

 [~, 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)
  

Ответ №2:

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

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

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

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

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

?

Комментарии:

1. Да. извините, что написано неправильно, вы правы насчет ненужного использования kar> 0;