c#对数组的计算过程,如在matlab中
本文关键字:如在 matlab 过程 计算 数组 | 更新日期: 2023-09-27 18:07:02
我想在两个数组上计算一些东西,比如乘法,除法,正负运算或sin (array1(I) + array2(I))等…
在matlab中这些都很简单。
: t1
、t2
、t3
为数组:
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;
}
我怎么做窦,余弦,减,加,除法,减和除法....无限数学——只有一个函数的情况?
提前谢谢大家
您可以使用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();