优化平方或乘以数组中的每个元素

时间:2015-06-23 03:59:12

标签: c# arrays algorithm optimization matrix

我想问两个问题。

  1. 首先是有一个hf = {1,4,9,........,n-1,n}的数组。我想对数组中的每个元素进行平方,如{1 ^ 2,4 ^ 2,9 ^ 2,........,(n-1)^ 2,n ^ 2}。

  2. 有两个数组。一个是hf = {1,4,9,........,n-1,n},另一个是随机的= {2,3,4,........,k- 1,k}。我想将两个数组中的每个组件相乘。 {1 * 2,4 * 3,9 * 4,.......,(n-1)(k-1),n k}。

  3. 我用于此的实际代码如下:

        int np = 20000;
        for (int i = 0; i < np; i++)
        {
           random[i] = randomNG.GetNormal();
    
           for (int j = 0; j < np; j++)
           {
               sigma[j] = Math.Pow(hf[j], 2);
               hf[j] = hf[j] * random[i];
               sigma_super[j] = sigma_super[j] + sigma[j];
               hf_super[j] = hf_super[j] + hf[j];
           } 
        }
    

    为了完成上述情况,我已经使用过&#39;声明。问题是它需要花费大量的时间来处理,因为在另一个语句中有声明(20000x20000次迭代)。

    当我测量经过的时间时,它大约是14秒。有没有其他方法可以在更短的时间内做同样的事情(也许从开源库使用矩阵类)?我真的想优化这个过程。

1 个答案:

答案 0 :(得分:4)

两个20,000个元素的阵列(总共40,000个元素)并不多。你是如何实现你的代码以“花费大量时间来处理”的?

处理得相当快:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        int[] array1 = new int[20000];
        int[] array2 = new int[20000];
        int[] square = new int[20000];
        int[] product = new int[20000];

        Random r = new Random();
        for (int i = 0; i < array1.Length; i++)
        {
            array1[i] = r.Next(1, 10);
            array2[i] = r.Next(1, 10);

            square[i] = array1[i] * array1[i];
            product[i] = array1[i] * array2[i];
        }

        // Only displaying the first 20 results
        Console.WriteLine("Array1 : {0}", String.Join(",", array1.Take(20)));
        Console.WriteLine("Array2 : {0}", String.Join(",", array2.Take(20)));
        Console.WriteLine("Square : {0}", String.Join(",", square.Take(20)));
        Console.WriteLine("Product: {0}", String.Join(",", product.Take(20)));
    }
}

结果(每次执行都会有所不同):

Array1 : 4,3,4,7,3,3,5,6,3,3,9,7,5,4,4,2,8,7,4,7
Array2 : 4,7,6,7,4,6,4,8,8,3,7,2,2,7,3,2,4,2,8,3
Square : 16,9,16,49,9,9,25,36,9,9,81,49,25,16,16,4,64,49,16,49
Product: 16,21,24,49,12,18,20,48,24,9,63,14,10,28,12,4,32,14,32,21

请参阅此处的工作示例... https://dotnetfiddle.net/83I3B0