Python.numpy.矩阵乘法运算

声明:本文章转载于矩阵的乘法运算及Python实现


在讲矩阵相乘之前,我们先看一个生活中的例子。
假如猪肉、牛肉、鸡蛋的价格在一周内不发生变化,记录近三周内的价格。为计算简单起见,价格都设定为整数。

设某个家庭每周对猪肉、牛肉、鸡蛋的需求分别为4千克、3千克、2千克,求这个家庭近三周对上述三种食品的需求开支?

一般计算过程为:
第一周:15 X 4 + 28 X 3 + 5 X 2 = 154
第二周:12 X 4 + 31 X 3 + 6 X 2 = 153
第三周:13 X 4 + 29 X 3 + 7 X 2 = 153

现在我们把上面的数据用矩阵来表示,矩阵A表示猪肉、牛肉、鸡蛋三周的价格,矩阵B表示某个家庭每周的需求。

矩阵A X B的结果是什么呢?

  • 矩阵A的第1、2、3行分别表示第一周、第二周、第三周,
  • 矩阵A的第1、2、3列分别表示猪肉、牛肉、鸡蛋每周的价格,和上面的表格数据是一致的。
  • 矩阵B是3行1列的矩阵,也称为列向量,后面的课程会讲到向量,矩阵B的第1、2、3行分别表示某家庭每周猪肉、牛肉、鸡蛋的需求量。

要使矩阵A乘以矩阵B的结果符合我们的问题需求,其结果应该是一个3X1矩阵C,其中C矩阵第1行第1列元素是A矩阵第1行的每列元素与B矩阵第1列的每行元素的乘积和;C矩阵的第2行第1列元素是A矩阵第2行的每列元素与B矩阵第1列的每行元素的乘积和;C矩阵的第3行第1列元素是A矩阵第3行的每列元素与B矩阵第1列的每行元素的乘积和。

下面我们给出两个矩阵的乘法规则:
设A是一个m X n矩阵,B是一个 n X p矩阵,则A与B的乘积是一个m X p矩阵,这个矩阵的第i行第j列的元素Cij等于A矩阵的第i行元素与B矩阵的第j列对应元素的乘积和,即:

注意:
A矩阵和B矩阵可以相乘的条件是:A矩阵的列数等于B矩阵的行数。矩阵的乘法不满足交互律,即A X B != B X A。

矩阵最早来自于方程组的系数及常数所构成的方阵。因此矩阵的乘法规则是为了满足使用矩阵解线性方程组的要求而设定的。

在前面的案例中,我们设某家庭近三周每周对猪肉、牛肉、鸡蛋的需求分别为x千克、y千克、z千克,已知近三周每周猪肉、牛肉、鸡蛋的价格和某家庭近三周每周的消费,求x、y和z。

可以列三元一次方程组:

15x + 28y + 5z = 154
12x + 31y + 6z = 153
13x + 29y + 7z = 153

用消元法我们可以求得x = 4,y=3,z=2。

我们也可以把上面方程组的系数、未知数、常数用矩阵的方式来表示,这样就可以使用矩阵运算来求解方程组。

求解三元一次方程组的问题就变为:
已知A矩阵,已知A矩阵和B矩阵的乘积C矩阵,求B矩阵的问题。如何求B矩阵,在后面的解线性方程组课程会讨论。

对上面的矩阵,如果再写回三元一次方程组的形式,可以按照矩阵的乘法规则来写:
15x + 28y + 5z = 154
12x + 31y + 6z = 153
13x + 29y + 7z = 153

下面我们使用Python语言来实现A矩阵与B矩阵的乘法运算。

#定义矩阵A和B
A = [[15,28,5],[12,31,6],[13,29,7]]
B = [[4],[3],[2]]#定义矩阵乘法运算函数
def matrixMul(A, B):#创建矩阵C,矩阵C的默认元素都为0#矩阵C的行数为A矩阵的行数,列数为B矩阵的列数C = [[0] * len(B[0]) for i in range(len(A))]#按行遍历A矩阵for i in range(len(A)):#按列遍历B矩阵for j in range(len(B[0])):#C矩阵的第i行第j列所对应的数值#等于A矩阵的第i行分别乘以B矩阵的第j列之和for k in range(len(B)):C[i][j] += A[i][k] * B[k][j]return Cif __name__ == '__main__':C = matrixMul(A,B)print(C)

下面我们使用NumPy库来实现A与B矩阵的乘法运算。

import numpy as np#定义矩阵A和B
A = np.array([[15,28,5],[12,31,6],[13,29,7]])
B = np.array([[4],[3],[2]])#定义矩阵乘法运算函数
def matrixMul(A, B):#NumPy的matmul完成矩阵乘法运算C = np.matmul(A,B)return Cif __name__ == '__main__':C = matrixMul(A,B)print(C)

【Python】数据分析.numpy.矩阵乘法运算相关推荐

  1. Python数据分析——NumPy数值计算基础(二)

    Python数据分析--NumPy数值计算基础(二) 思维导图: 数据的csv文件存取 csv(Comma-Separated Value,逗号分隔值)文件:是一种常见的文件格式,用来存储批量数据. ...

  2. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

  3. Python数据分析numpy入门(三)-------numpy100题练习

    Python数据分析基础 二.numpy100题练习 二.numpy100题练习 1.Import the numpy package under the name np (★☆☆). 导入numpy ...

  4. python分析基金数据,[Python数据分析]numpy基金会,基础

    数组属性 ndim与shape的区别 ndim 轴的数量,即从外到内的层数(axis=0为最外层) shape 每层数组的元素,返回一个元组,其长度即为ndim,比如(2,2,3)表示axis=0,有 ...

  5. python中numpy矩阵的零填充

    目录 需求: 方法: 一.再new一个更大的所需要的矩阵大小 二.pad函数 其他想法 需求: 对于图像处理中的一些过程,我需要对读取的numpy矩阵进行size的扩充,比如原本是(4,6)的矩阵,现 ...

  6. Python数据分析 | Numpy基本属性介绍

    Numpy基本属性介绍 目录 numpy介绍 常用基本属性 numpy介绍 NumPy(Numerical Python)是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比P ...

  7. Python 数据分析 —— Numpy

    文章目录 小引 -- 为什么要学numpy? numpy 简介 numpy用法: 创建数组 -- numpy.array() 生成整数序列 -- numpy.arange() 生成等差数列 -- nu ...

  8. Python数据分析-numpy

    目录 一.创建数组 1.1 从列表传入:array() 1.2 生成全0数组:zeros() 1.3 生成全1数组:ones() 1.4 fill(x)函数将数组设定为x: 1.5 类型转换:asty ...

  9. Python数据分析Numpy库方法简介(三)

    补充: np.ceil()向上取整 3.1向上取整是4 np.floor()向下取整 数组名.resize((m,n)) 重置行列 基础操作 np.random.randn()符合正态分布(钟行/高斯 ...

最新文章

  1. tar:file-changed-as-we-read-it报错处理
  2. python:字符串常用处理函数:
  3. 北理计算机网络实验汇编,北理计算机与网络实验(II)(汇编语言实验4).docx
  4. Ubuntu下安装Balsamiq Mockups
  5. Android 升级下载 它们的定义Updates 兼容版本
  6. nginx配置和前端跨域问题
  7. set获取元素_C++与STL入门(4):关联容器:集合set
  8. c语言 error 库,C 库函数
  9. java xml字符串转换成对象_将XML字符串转换为对象
  10. php重置按钮,input 标签中 reset 重置按钮点击后表单不能清空的原因
  11. 中柏平板bios对照表_BIOS详解及中英文对照表
  12. 强制退出hdfs安全模式
  13. ch3 电磁干扰的耦合和传播
  14. 猿创征文|Android 11.0 12.0Launcher3中app列表页的app名称分两行显示
  15. 每日新闻:6G概念研究今年启动;德国SAP斥80亿美元收购美国Qualtrics;华为发布人工智能平台;微软收购两家游戏工作室...
  16. matlab模拟夫琅禾费单缝衍射,夫琅禾费衍射的Matlab仿真
  17. ar8171 linux网卡驱动下载,ar8171 8175网卡驱动
  18. 微信小程序---密码输入
  19. 【数据库篇】MySQL InnoDB ibd 文件格式解析
  20. 我的《电子文件归档与管理规范》

热门文章

  1. 同行北京丨科士达聚渠道之力,共驱数据中心低碳高效发展
  2. 用scrapy 大规模 无登陆 爬取 58同城 房产信息
  3. 解决:impdp导入.dmp文件
  4. org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds i
  5. Mac系统配置php环境
  6. Android KeyCode对照表
  7. 时间复杂度如何推算?
  8. OBJECT ARX 实体类 通用操作函数
  9. 短发狮子座少女:男朋友绝对不可以打LOL
  10. 怎样修复老照片?三个方法教你修复照片怎么弄