c#对数组的计算过程,如在matlab中

本文关键字:如在 matlab 过程 计算 数组 | 更新日期: 2023-09-27 18:07:02

我想在两个数组上计算一些东西,比如乘法,除法,正负运算或sin (array1(I) + array2(I))等…
在matlab中这些都很简单。

例如

:
t1t2t3为数组:

t1=0:1:100;  
t2=0:1:100;   
t3 = t1.*t2; // the multiplication. that's all in matlab! t3 will be 1, 4, 9, 16,  ....... , 100000.   

或另一个,t3 = sin( pi*t1 ) / t2;//等。

如果我想在数组上做很多操作,我需要一直为所有的操作写代码吗?

Double[] Result_Array = multiplication(array1,array2);
 double[] multiplication(double[] array1, double[] array2)
{
    double[] result = new double[array1.Length];
    for (int i = 0; i < array1.Length; i++)
    {
        result[i] = array1[i] * array2[i];
    }
    return result;
 }

我怎么做窦,余弦,减,加,除法,减和除法....无限数学——只有一个函数的情况?
提前谢谢大家

c#对数组的计算过程,如在matlab中

您可以使用System。Linq

public TEntity[] Compute<TEntity>(TEntity[] array, Func<TEntity, TEntity> operation)
{
    return array.Select(operation).ToArray();
}
public TEntity[] Compute<TEntity>(TEntity[] array1, TEntity[] array2, Func<TEntity, TEntity, TEntity> operation)
{
    if (array1.Length != array2.Length)
        throw new ArgumentException();
    return array1.Zip(array2, operation).ToArray();
    // return Enumerable.Range(0, array1.Length).Select(index => operation(array1[index], array2[index])).ToArray();
}

并像这样使用:

double[] result1 = Compute(array1, Math.Cos);
double[] result2 = Compute(array1, array2, Math.Log);
double[] result3 = Compute(array1, array2, (value1, value2) => value1 * value2);

您需要的是一个函数,该函数将委托(对一个double或两个double参数的函数的引用)应用于同一维度的一个/两个数组中的每个元素或每对元素。

例如:

delegate double UnaryOp(double x);
double[] array_unary_op(double[] arr, UnaryOp op)
{
    double[] result = new double[arr.Length];
    for (int i = 0; i < arr.Length; i++)
    {
        result[i] = op(arr[i]);
    }
    return result;
}

apply_unary_op(somearray, Math.Tan)apply_unary_op(somearray, Math.Exp)行中调用

不确定这是否是您正在寻找的,但您可以使用.Zip代替并提供您想要的任何result功能:

double[] result = array1.Zip(array2, (first, second) => first * second).ToArray();

或者用第二个例子:

double[] result = 
    array1.Zip(array2, (first, second) => Math.Sin(Math.PI * first) / second).ToArray();