#c# #math.net
#c# #math.net
Вопрос:
У меня есть два массива
double[] a = new double[] {1,2,3,4,5};
double[] b = new double[] {2,3,2,3,5};
которые я преобразую в два вектора:
Vector<double> A = Vector<double>.Build.DenseOfArray(a);
Vector<double> B = Vector<double>.Build.DenseOfArray(b);
Я хотел бы сравнить значения ‘A’ с ‘B’ и вернуть вектор, в котором элементы 2 и 3 (0,1,2,3,4) обрезаны, потому что они больше эквивалентного значения в ‘b’, например:
[1,2,2,3,5]
Кто-нибудь может объяснить, как это сделать, не прибегая к циклу for?
Ответ №1:
Похоже Map2
, метод может делать то, что вы хотите. Из документации:
Vector<T> Map2(Func<T, T, T> f, Vector<T> other, Zeros zeros)
Применяет функцию к каждой паре значений двух векторов и возвращает результаты в виде нового вектора.
Обратите внимание, что третий параметр на самом деле является необязательным и имеет значение по умолчанию Zeros.AllowSkip
.
Вы можете использовать метод следующим образом:
Vector<double> C = A.Map2((x, y) => (x > y ? y : x), B);
Демонстрационная скрипка: https://dotnetfiddle.net/hfWJhI
Комментарии:
1. Рад, что смог помочь!