Как сравнить два вектора и обрезать значения первого вектора на максимальное значение в другом векторе с помощью математики.ЧИСТЫЕ цифры

#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. Рад, что смог помочь!