日期:2014-05-18  浏览次数:20981 次

c#数组基本运算??
两个维数相同的数组a,b,要求各元素相加(或减法,乘法,除法),组成新的数组c,
  可不可以直接c=a+b(类似matlab语言)?还是只能遍历各元素相加??

------解决方案--------------------
遍历吧。
------解决方案--------------------
这个得遍历

C# code

int[] i = {1,2,3,4,5};
int[] j = {6,7,8,9,10};
int[] k = new int[i.Length];
for(int m=0;m<i.Length;m++)
{
    k[m] = i[m] + j[m];
}
foreach(int n in k)
{
   Response.Write(n.ToString());
}

------解决方案--------------------
C# code
int[] a = { 1, 2, 3 };
int[] b = { 4, 5, 6 };
int[] result = a.Zip(b, (x, y) => x + y).ToArray(); // result = { 5, 7, 9 }

------解决方案--------------------
矩阵运算时一个数学软件包基本的功能,写成简练的表达式是很符合数学家的习惯的——因为跟数学书上的符号一直。

随便写一个重载+号的例子吧。
C# code
    public class Mat
    {
        public double[,] Datas;

        public static Mat operator +(Mat a, Mat b)
        {
            var result = new Mat { Datas = new double[a.Datas.GetLength(0), b.Datas.GetLength(1)] };
            for (var i = 0; i < a.Datas.GetLength(0); i++)
                for (var j = 0; j < b.Datas.GetLength(1); j++)
                {
                    double sum = 0;
                    for (var k = 0; k < a.Datas.GetLength(1); k++)
                        sum += a.Datas[i, k] * b.Datas[k, j];
                    result.Datas[i, j] = sum;
                }
            return result;
        }
    }