如何使用 Math.NET Numerics

问题描述

我有两个数组

double[] a = new double[] {1,2,3,4,5}; 
double[] b = new double[] {2,5}; 

我将其转换为两个向量:

Vector<double> A = Vector<double>.Build.DenSEOfArray(a);
Vector<double> B = Vector<double>.Build.DenSEOfArray(b);

我想比较 'A' 和 'B' 的值并返回一个向量,其中元素 2 和 3 (0,1,4) 被剪裁,因为它们大于 ' 中的等效值b' 例如:

[1,5]

谁能解释如何在不诉诸 for 循环的情况下做到这一点?

解决方法

看起来 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