两个二维矩阵相乘的算法
2010-11-27 17:56
288 查看
昨天看了清华大学严蔚敏老师的数据结构的视频,讲到了数组,严蔚敏老师认真分析了一个关于两个二维数组的算法,那个算法是用c语言写的,反复看了两遍才把那个算法看懂了。今天上班上午没事做,干脆把昨天的算法改成C#语言版的。(嘿嘿,俺只对C#语言比较了解)
这是俺写的代码:
class IArray
{
int[,] aArray = new int[, ] { { 0, 0, 2 }, { 1, 0, 3 }, { 0, 4, 0 }, { 2, 1, 0 } };
int[,] bArray = new int[, ] { { 1, 0 }, { 0, 4 }, { 2, 1 } };
public void GetValue()
{
Console.WriteLine("第一个数组如下:");
for (int i = 0; i < aArray.GetLength(0); i++)
{
for (int j = 0; j < aArray.GetLength(1); j++)
{
Console.Write("{0} ", aArray[i, j]);
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("第二个数组如下:");
for (int i = 0; i < bArray.GetLength(0); i++)
{
for (int j = 0; j < bArray.GetLength(1); j++)
{
Console.Write("{0} ", bArray[i, j]);
}
Console.WriteLine();
}
Console.WriteLine();
int[,] cArray = new int[aArray.GetLength(0), bArray.GetLength(1)];//数组cArray为aArray和bArray相乘的结果
for (int i = 0; i < aArray.GetLength(0); i++) //i为数组aArray的行数
{
for (int j = 0; j < bArray.GetLength(1); j++) //j为bArray的列数
{
int total = 0;
for (int k = 0; k < aArray.GetLength(1); k++) //k为数组aArray的列数
{
if (aArray[i, k] == 0) //若数组aArray的 i 行k列的值为0,则什么都不做
{
}
else
{
total += aArray[i, k] * bArray[k, j];
cArray[i, j] = total;
}
}
}
}
Console.WriteLine("两个数组相乘计算结果数组如下:");
for (int i = 0; i < cArray.GetLength(0); i++)
{
for (int j = 0; j < cArray.GetLength(1); j++)
{
Console.Write("{0} ", cArray[i, j]);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
static void Main(string[] args)
{
IArray ia = new IArray();
ia.GetValue();
}
二维数组aArray和bArray直接定义好了,懒的一个一个地手动地输入数字的值了。
最可怜的是我连声明一个二维数组都要上网搜索,真是汗颜呀!(俺是刚工作3个月的小程序员,属于菜鸟中的菜鸟)
虽然这个比较简单,但是确是我第一次把学到的理论知识转化为实践,还是很有象征意义的!
这是俺写的代码:
class IArray
{
int[,] aArray = new int[, ] { { 0, 0, 2 }, { 1, 0, 3 }, { 0, 4, 0 }, { 2, 1, 0 } };
int[,] bArray = new int[, ] { { 1, 0 }, { 0, 4 }, { 2, 1 } };
public void GetValue()
{
Console.WriteLine("第一个数组如下:");
for (int i = 0; i < aArray.GetLength(0); i++)
{
for (int j = 0; j < aArray.GetLength(1); j++)
{
Console.Write("{0} ", aArray[i, j]);
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("第二个数组如下:");
for (int i = 0; i < bArray.GetLength(0); i++)
{
for (int j = 0; j < bArray.GetLength(1); j++)
{
Console.Write("{0} ", bArray[i, j]);
}
Console.WriteLine();
}
Console.WriteLine();
int[,] cArray = new int[aArray.GetLength(0), bArray.GetLength(1)];//数组cArray为aArray和bArray相乘的结果
for (int i = 0; i < aArray.GetLength(0); i++) //i为数组aArray的行数
{
for (int j = 0; j < bArray.GetLength(1); j++) //j为bArray的列数
{
int total = 0;
for (int k = 0; k < aArray.GetLength(1); k++) //k为数组aArray的列数
{
if (aArray[i, k] == 0) //若数组aArray的 i 行k列的值为0,则什么都不做
{
}
else
{
total += aArray[i, k] * bArray[k, j];
cArray[i, j] = total;
}
}
}
}
Console.WriteLine("两个数组相乘计算结果数组如下:");
for (int i = 0; i < cArray.GetLength(0); i++)
{
for (int j = 0; j < cArray.GetLength(1); j++)
{
Console.Write("{0} ", cArray[i, j]);
}
Console.WriteLine();
}
Console.ReadLine();
}
}
static void Main(string[] args)
{
IArray ia = new IArray();
ia.GetValue();
}
二维数组aArray和bArray直接定义好了,懒的一个一个地手动地输入数字的值了。
最可怜的是我连声明一个二维数组都要上网搜索,真是汗颜呀!(俺是刚工作3个月的小程序员,属于菜鸟中的菜鸟)
虽然这个比较简单,但是确是我第一次把学到的理论知识转化为实践,还是很有象征意义的!
相关文章推荐
- 两个矩阵相乘—Strassen算法与传统算法(要求矩阵阶n为2的幂)
- 第15周-两个二阶二维矩阵相乘
- [算法] 矩阵相乘
- 找到一个二维矩阵中所有包含0的,并且把0元素所在行与列全部转换成0的算法!
- 特斯拉森算法快速矩阵相乘算法
- 【算法】矩阵相乘
- 两个矩阵相乘但是结果不对,只有第一行的对,求解!
- 矩阵相乘的算法
- 二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]
- [算法] 矩阵相乘
- 两个矩阵相乘!
- 算法提高 矩阵相乘
- 实现两个矩阵的相乘(指针)
- 微软算法100道题------求一个矩阵中最大的二维矩阵(元素和最大)
- C++实现两个矩阵相乘
- 两个数组各个数相加或相乘变成一个矩阵求第K大
- C++两个矩阵相乘
- TF:Tensorflow之session会话的使用,定义两个矩阵,两种方法输出2个矩阵相乘的结果—Jason niu
- C++中一些简单的数组算法(矩阵相乘) 第二篇
- Matlab中两个矩阵相乘报错:MTIMES is not fully supported for integer classes. At least one input must be scalar