【问题标题】:How to compare two Vectors and clip the first Vector values by the maximum value in another Vector using Math.NET Numerics如何使用 Math.NET Numerics 比较两个向量并通过另一个向量中的最大值裁剪第一个向量值
【发布时间】:2021-04-01 04:20:03
【问题描述】:

我有两个数组

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 循环的情况下做到这一点?

【问题讨论】:

    标签: c# math.net


    【解决方案1】:

    看起来Map2 方法可以做你想做的事。来自文档:

    Vector&lt;T&gt; Map2(Func&lt;T, T, T&gt; f, Vector&lt;T&gt; other, Zeros zeros)
    将函数应用于两个向量的每个值对,并将结果作为新向量返回。

    注意第三个参数实际上是可选的,默认值为Zeros.AllowSkip

    你可以使用这样的方法:

    Vector<double> C = A.Map2((x, y) => (x > y ? y : x), B);
    

    演示小提琴:https://dotnetfiddle.net/hfWJhI

    【讨论】:

    • 很高兴能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2019-10-06
    • 2021-02-23
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多