Обычно в этой ситуации очень распространенный подход состоит в нормализации всех векторов между 0
и 1
(интервал [0,1]
с включением обеих крайностей). Это может быть легко достигнуто следующим образом:
dat1_norm = rescale(dat1);
dat2_norm = rescale(dat2);
Если у вас версия Matlab больше или равна 2017b
, функция rescale уже включена по умолчанию. В противном случае его можно определить следующим образом:
function x = rescale(x)
x = x - min(x);
x = x ./ max(x);
end
Для достижения указанной вами цели (масштабирование dat1
на основе минимальных и максимальных значений dat2
) вы можете поступить так: @ cemsazara сказал в своем комментарии:
dat2_scaled = rescale(dat2,min(dat1),max(dat1));
Но это хорошее решение только при условии, что вы можете априори идентифицировать вектор с большим масштабом. В противном случае риск состоит в том, чтобы перемасштабировать меньший вектор на основе значений большего вектора. Вот почему первый подход, который я предложил вам, может быть более удобным.
Чтобы принять этот второй подход, если ваша версия Matlab меньше 2017b
, вы должны изменить пользовательскую функцию rescale
, определенную выше, чтобы принять два дополнительных аргумента:
function x = rescale(x,mn,mx)
if (nargin == 1)
mn = min(x);
mx = max(x);
elseif ((nargin == 0) || (nargin == 2))
error('Invalid number of arguments supplied.');
end
x = x - mn;
x = x ./ mx;
end