优化数组中每个元素的平方或乘法操作

3
我有两个问题想要问。
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},另一个是 random = {2, 3, 4, ........, k-1, k}。我想要将两个数组中的每个元素相乘,得到 {1*2, 4*3, 9*4, ......., (n-1)(k-1), nk}。
实际使用的代码如下:
    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];
       } 
    }

为了处理上述情况,我使用了'for'语句。问题在于它需要很长的时间来处理,因为在另一个for语句中有一个for语句(20000x20000次迭代)。
当我测量经过的时间时,大约需要14秒。是否有其他方法可以更短时间完成相同的事情(也许使用来自开源库的矩阵类)?我真的想优化这个过程。

每个数组中大约有20000个元素。以上是一个例子。如果我在每一步应用精确的方程式,那将需要很长时间!谢谢阅读。 - user3170073
如果你预先知道数组的大小,那么你可以在n / 2次迭代中完成它。 - Ediac
在第二种情况下,这两个数组的长度是否相同? - Shar1er80
我可以假设第一个数组是平方数的数组吗?即{1,4,9 .....(n-1)^2,n^2}? - Rafaf Tahsin
是的,它们具有相同的长度。 - user3170073
显示剩余6条评论
1个回答

4

两个包含20000个元素的数组(总共40000个元素)并不算很多。您是如何实现代码的,以至于它需要“很长时间才能处理”?

这个处理速度相当快:

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


感谢您的回答,我应该详细说明我的问题。我稍微编辑了一下我的答案,以重新定位问题的目的。实际情况是我正在处理嵌套的for语句。这会创建很多迭代。我应该向您提出这个问题。您能否再次看看我的问题?再次感谢您的回答。 - user3170073

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接