#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;