Учитывая вектор, например, a=[1;1020;-1000;5;1040]
, моя цель состоит в том, чтобы найти другой вектор b
такой, что для всех i
:
b[i] = a[i], if abs(a[i])<abs(a[i]+1024), abs(a[i])<abs(a[i]-1024),
b[i] = a[i]+1024, if abs(a[i]+1024)<abs(a[i]), abs(a[i]+1024)<abs(a[i]-1024)
b[i] = a[i]-1024, if abs(a[i]-1024)<abs(a[i]), abs(a[i]-1024)<abs(a[i]+1024)
Правильный ответ в примере: b=[1,-4,24,5,16]
Я хочу векторизованное решение. Я пытался решить эту проблему, сначала построив следующую матрицу: temp=[a,a+1024,a-1024]
, затем найдя индекс с минимальным абсолютным значением: [~,ind]=min(abs(temp),[],2)
, а затем применив индекс: b = temp (:,ind)
. Последнее утверждение не работает так, как я хочу, и я не уверен, как заставить его работать.