参考代码:(.........有待分析)using System;
using System.Diagnostics;
using PerfCounter;namespace BenchJaggedMatrix
{
/// <summary>
/// Matrix Multiplication using Jagged Arrays
/// </summary>
class MatrixMul
{ [STAThread]
static void Main(string[] args)
{
int i, n; // Declare jagged matrices
double[][] MatrixA, MatrixB, MatrixC;
Random r = new Random(50);
n = 1000; MatrixA = new double[n][];
MatrixB = new double[n][];
MatrixC = new double[n][]; /* Instantiate and Initialize Arrays */
for (i=0; i<MatrixA.Length; i++) {
MatrixA[i] = new double[n];
MatrixB[i] = new double[n];
MatrixC[i] = new double[n];
for (int j=0; j<MatrixA[i].Length; j++) {
MatrixA[i][j]=(double)r.Next(50);
MatrixB[i][j]=(double)r.Next(50);
}
} Counter counter = new Counter(); /* Call and measure Matdot */
Console.WriteLine("Starting counter...");
counter.Reset();
counter.Start();
Matdot(MatrixA, MatrixB, MatrixC); // call MatDot
counter.Stop(); Console.WriteLine("Time taken: {0}", counter);
Console.WriteLine("Obtained {0:F2} MFlops",
counter.MFlops(2*n*n*n));
Console.ReadLine();
} public static void Matdot(double [][]a, double [][]b,
double [][]c)
{
int i,j,k;
double tmp; for (i=0; i<a.Length; i++)
{
for (j=0; j<c[i].Length; j++)
{
tmp = c[i][j];
for (k=0; k<b[i].Length; k++)
{
tmp += a[i][k]*b[k][j];
}
c[i][j]=tmp;
}
}
}
}
}-------摘自网上
using System.Diagnostics;
using PerfCounter;namespace BenchJaggedMatrix
{
/// <summary>
/// Matrix Multiplication using Jagged Arrays
/// </summary>
class MatrixMul
{ [STAThread]
static void Main(string[] args)
{
int i, n; // Declare jagged matrices
double[][] MatrixA, MatrixB, MatrixC;
Random r = new Random(50);
n = 1000; MatrixA = new double[n][];
MatrixB = new double[n][];
MatrixC = new double[n][]; /* Instantiate and Initialize Arrays */
for (i=0; i<MatrixA.Length; i++) {
MatrixA[i] = new double[n];
MatrixB[i] = new double[n];
MatrixC[i] = new double[n];
for (int j=0; j<MatrixA[i].Length; j++) {
MatrixA[i][j]=(double)r.Next(50);
MatrixB[i][j]=(double)r.Next(50);
}
} Counter counter = new Counter(); /* Call and measure Matdot */
Console.WriteLine("Starting counter...");
counter.Reset();
counter.Start();
Matdot(MatrixA, MatrixB, MatrixC); // call MatDot
counter.Stop(); Console.WriteLine("Time taken: {0}", counter);
Console.WriteLine("Obtained {0:F2} MFlops",
counter.MFlops(2*n*n*n));
Console.ReadLine();
} public static void Matdot(double [][]a, double [][]b,
double [][]c)
{
int i,j,k;
double tmp; for (i=0; i<a.Length; i++)
{
for (j=0; j<c[i].Length; j++)
{
tmp = c[i][j];
for (k=0; k<b[i].Length; k++)
{
tmp += a[i][k]*b[k][j];
}
c[i][j]=tmp;
}
}
}
}
}-------摘自网上
Sample code as follows:
int[][] nArray = new int[3];
for( int i = 0; i < 3; i++ )
nArray[i] = new int[i+1];
nArray[i]是什么东西..既然nArray被定义为一个二维整型数组,那nArray[i]是什么呢?我只知道nArray[x][y]可以访问这个二维数组中的一个指定为x和y位置的数组成员.难道说nArray[i]是指一"列"或一行的这个二维数组成员的"集合"吗??如果这样,那C,和C++中可以这样吗,这一特点是C#相对C和C++所独有的吗?那进一步而言是不是说一个N维数组,中间可以有任意i个(小于N)的确定维数和N-i个不确定维数呢?To:高歌
为什么说它用处不大呢?是基于访问可变维(可能不准确,不是称之为不规则)数组的效能开销过大还是基于应用分析域中,遇到可归结为此的问题都可以变通为其它的处理方式例如1维数组而加以解决?
int[,] nArray = new int[3,2]; // a 3*2 int array 如果定义不规则维数的数组应该如下:
int[][] nArray = new int[3]{ new int[2], new int[3], new int[4] };
int[][] nArray;
那么这样理解,可能会更清楚一些。
首先对于nArray来说,是一个int[]对象,而对于nArray[i]来说也是一个int[]对象,即它是逐个分解的。
...
int[,][,,] i;
public TestClass()
{
this.i=new [2,3][,,];
}
...上面代码的意思大概是这样的,声明一个整数数组,共有5维,将它做为2*3个包含整型数组,这2*3个整型数组中每个数组都有3维;如果要用到这2*3个整型数组中的某个数组例如i[0][2]这个位置上的整型数组那么应该这样做i[0,2]=new int[3,3,3];同理可以这样..
i[1,0]=new int[4,2,2];
上面两句话的意思是 位于0,2位置的整型数组i[0,2]共有3*3*3个整型元素的整数阵.
而下面是4*2*2个整数阵特别需要指出的是:第二次new的类型必需与第一次声明保持一致,这才合乎规则和意思.否则错误.