Я написал следующий «однострочный» для нормализации вектора (представленного здесь обычным массивом), что означает деление каждой записи на евклидову норму вектора.
normalize = v => v.map(x => x/Math.sqrt(v.map(x => x * x).reduce((a, b) => a + b)))
К сожалению, это не очень эффективно, так как норма вычисляется снова и снова для каждой записи.Можем ли мы изменить этот «однострочник» таким образом, чтобы избежать повторной оценки?
РЕДАКТИРОВАТЬ: Один метод, который я нашел - не очень элегантный и не очень читаемый - требует добавления другого входного аргумента к внешнемулямбда и использование ее в качестве входных данных для нормы:
normalize = w => (norm => w.map(x => x / norm))(Math.sqrt(w.map(x => x * x).reduce((a, b) => a + b)))