2012-03-19 10:56:25 MFCdestoryer 阅读数 2610
  • 机器学习数学基础之矩阵视频教学

    本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。帮助想入门机器学习的朋友们快速掌握数学基础。 主要内容: 1. 矩阵的定义、性质、运算、分解以及应用。 2. 线性空间、范数、生成子空间相关知识。

    11666 人正在学习 去看看 AI100讲师

这里使用最传统的方法:  

 矩阵A的行 乘以矩阵B的列 来计算矩阵的乘法的,所以比较简单


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 矩阵乘法
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] a = { { 1, 2, 3 }, { 4, 5, 6 } };
            int[,] b = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
            int[,] c = new int[2, 2];
            matrixMultipy(a, b, c, 2, 3, 3, 2);
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    Console.Write("{0}   ", c[i, j]);
                    if ((j + 1) % 2 == 0)
                    {
                        Console.WriteLine();
                    }
                }
            }

            Console.Read();
        }

        /// <summary>
        /// 矩阵的乘法
        /// </summary>
        /// <param name="a">第一个矩阵</param>
        /// <param name="b">第二个矩阵</param>
        /// <param name="c">算出来的矩阵</param>
        /// <param name="ra">第一个的行数</param>
        /// <param name="ca">第一个的列数</param>
        /// <param name="rb">第二个的行数</param>
        /// <param name="cb">第二个的列数</param>
        static void matrixMultipy(int[,] a, int[,] b, int[,] c, int ra, int ca, int rb, int cb)
        {
            if (ca != rb)
            {
                throw new Exception("行与列要相等");
            }

            for (int i = 0; i < ra; i++)
            {
                for (int j = 0; j < cb; j++)
                {
                    int sum = a[i, 0] * b[0, j];
                    for (int k = 1; k < ca; k++)
                    {
                        sum += a[i, k] * b[k, j];
                    }
                    c[i, j] = sum;
                }
            }
        }
    }
}


2019-09-26 11:20:32 qq_45514303 阅读数 455
  • 机器学习数学基础之矩阵视频教学

    本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。帮助想入门机器学习的朋友们快速掌握数学基础。 主要内容: 1. 矩阵的定义、性质、运算、分解以及应用。 2. 线性空间、范数、生成子空间相关知识。

    11666 人正在学习 去看看 AI100讲师

矩阵乘法C++

本文描述了用C++解决线性代数中的矩阵乘法问题

程序要求

  • 实数范围
  • vs17运行
  • 自行处理矩阵的行数列数
//矩阵相乘
#include "pch.h"
#include <iostream>
#include <cmath>
using namespace std;
double init(double p)      
{
	p = 0.0;
	return(p);
}
     
void f(double a[], int ma, int na, double b[], int mb, int nb, double ab[])
{
	int i, j, k, u;
	if (na != mb)
	{
		cout << "矩阵不能相乘!" << endl;
	}
	for (i = 0; i <= ma - 1; i++)
		for (j = 0; j <= nb - 1; j++)
		{
			u = i * nb + j;
			ab[u] = init(ab[u]);           
			for (k = 0; k <= mb - 1; k++)
				ab[u] = ab[u] + a[i*na + k] * b[k*nb + j];
		}
}

  int main()
  {
	  int i,j;
	  double a[3][4] = { {1,1,1,1,},{2,2,2,2},{3,3,3,3} };
	  double ab[3][3], b[4][3] = { {1,1,1},{2,2,2},{3,3,3},{4,4,4} };
	  f(&a[0][0],3,4,&b[0][0],4,3,&ab[0][0]);
	  cout <<"乘积矩阵:" <<endl;
	  for (i=0; i<3; i++)
	  {
		  for (j=0; j<3; j++)  { cout <<ab[i][j] <<"  ";  }
		  cout <<endl;
	   }
	  return 0;
  }

在主函数中输入矩阵,处理行数列数,在f函数中进行乘积运算

 

       我的GitHub链接https://github.com/TYduoduo

2017-09-18 15:52:38 bo_1997_2017 阅读数 672
  • 机器学习数学基础之矩阵视频教学

    本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。帮助想入门机器学习的朋友们快速掌握数学基础。 主要内容: 1. 矩阵的定义、性质、运算、分解以及应用。 2. 线性空间、范数、生成子空间相关知识。

    11666 人正在学习 去看看 AI100讲师

只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。


1.一个两行三列的矩阵和一个三行两列的矩阵乘法

#include<iostream>

#define M 2   //定义A矩阵的行
#define N 3   //定义A矩阵的列 B矩阵的行

#define P 2   //定义B矩阵的列

using namespace std;

int i,j,k;

int main()

{
int A[M][N]={2,3,4,5,6,7},B[N][P]={2,3,4,5,6,7},C[M][P]={0};

for(i=0;i<M;i++)     //C矩阵的行由A矩阵的行M决定
  for(j=0;j<P;j++)  //C矩阵的列由B矩阵的列P决定
  {
  for(int k=0;k<N;k++) //矩阵A和矩阵B对应项相乘 
C[i][j]+=A[i][k]*B[k][j];
         cout<<C[i][j]<<endl;
 }
return 0;
}



2018-11-27 22:12:02 shaynerain 阅读数 20
  • 机器学习数学基础之矩阵视频教学

    本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。帮助想入门机器学习的朋友们快速掌握数学基础。 主要内容: 1. 矩阵的定义、性质、运算、分解以及应用。 2. 线性空间、范数、生成子空间相关知识。

    11666 人正在学习 去看看 AI100讲师
/// <summary>   
        /// <summary>   
        /// 矩阵乘法   
        /// </summary>   
        /// <param name=”matrix1″>矩阵1</param>   
        /// <param name=”matrix2″>矩阵2</param>   
        /// <returns>积</returns>   
        private static double[][] MatrixMult(double[][] matrix1, double[][] matrix2)  
        {  
            //matrix1是m*n矩阵,matrix2是n*p矩阵,则result是m*p矩阵   
            int m = matrix1.Length, n = matrix2.Length, p = matrix2[0].Length;  
            double[][] result = new double[m][];  
            for (int i = 0; i < result.Length; i++)  
            {  
                result[i] = new double[p];  
            }  
            //矩阵乘法:c[i,j]=Sigma(k=1→n,a[i,k]*b[k,j])   
            for (int i = 0; i < m; i++)  
            {  
                for (int j = 0; j < p; j++)  
                {  
                    //对乘加法则   
                    for (int k = 0; k < n; k++)  
                    {  
                        result[i][j] += (matrix1[i][k] * matrix2[k][j]);  
                    }  
                }  
            }  
            return result;  
        }  

 

 
/// <summary>   
        /// 打印矩阵   
        /// </summary>   
        /// <param name=”matrix”>待打印矩阵</param>   
        private static void PrintMatrix(double[][] matrix)  
        {  
            for (int i = 0; i < matrix.Length; i++)  
            {  
                for (int j = 0; j < matrix[i].Length; j++)  
                {  
                    Console.Write(matrix[i][j] + “\t”);  
                }  
                Console.WriteLine();  
            }  
        }  

 

2016-07-13 22:15:37 yangsen600 阅读数 631
  • 机器学习数学基础之矩阵视频教学

    本课程囊括了机器学习理论中所需要的和线性代数相关的所有知识。帮助想入门机器学习的朋友们快速掌握数学基础。 主要内容: 1. 矩阵的定义、性质、运算、分解以及应用。 2. 线性空间、范数、生成子空间相关知识。

    11666 人正在学习 去看看 AI100讲师

大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。

这里写图片描述

刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。

这里写图片描述
矩阵减法也类似。
矩阵乘以一个常数,就是所有位置都乘以这个数。

这里写图片描述
但是,等到矩阵乘以矩阵的时候,一切就不一样了。

这里写图片描述

这个结果是怎么算出来的?
教科书告诉你,计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。

这里写图片描述

也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
怎么会有这么奇怪的规则?
我一直没理解这个规则的含义,导致《线性代数》这门课就没学懂。研究生时发现,线性代数是向量计算的基础,很多重要的数学模型都要用到向量计算,所以我做不了复杂模型。这一直让我有点伤心。
前些日子,受到一篇文章的启发,我终于想通了,矩阵乘法到底是什么东西。关键就是一句话,矩阵的本质就是线性方程式,两者是一一对应关系。如果从线性方程式的角度,理解矩阵乘法就毫无难度。
下面是一组线性方程式。

这里写图片描述

矩阵的最初目的,只是为线性方程组提供一个简写形式。

这里写图片描述

老实说,从上面这种写法,已经能看出矩阵乘法的规则了:系数矩阵第一行的2和1,各自与 x 和 y 的乘积之和,等于3。不过,这不算严格的证明,只是线性方程式转为矩阵的书写规则。
下面才是严格的证明。有三组未知数 x、y 和 t,其中 x 和 y 的关系如下。

这里写图片描述

x 和 t 的关系如下。

这里写图片描述

有了这两组方程式,就可以求 y 和 t 的关系。从矩阵来看,很显然,只要把第二个矩阵代入第一个矩阵即可。

这里写图片描述

从方程式来看,也可以把第二个方程组代入第一个方程组。

这里写图片描述

上面的方程组可以整理成下面的形式。

这里写图片描述

最后那个矩阵等式,与前面的矩阵等式一对照,就会得到下面的关系。

矩阵乘法的计算规则,从而得到证明。

C# 实现如下:

        public static Matrix3d operator *(Matrix3d lhs, Matrix3d rhs)
        {
            Matrix3d m44 = new Matrix3d();
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        m44.Values[j, i] += lhs.Values[j, k] * rhs.Values[k, i];
                    }
                }
            }
            return m44;
        }

矩阵乘法算法

阅读数 252

没有更多推荐了,返回首页