python中数组和矩阵乘法及使用总结(推荐)
作者:manjhOK 发布时间:2021-11-30 04:29:31
标签:python,数组,矩阵乘法
Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
但在数组乘和矩阵乘时,两者各有不同,如果a和b是两个matrices,那么a*b,就是矩阵积
如果a,b是数组的话,则a*b是数组的运算
1.对数组的操作
>>> import numpy as np
>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b=a.copy()
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a+b#多维数组的加减,按对应位置操作
array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
>>> a*3#多维数组乘常数,则对数组中每一个元素乘该常数
array([[ 3, 6, 9],
[12, 15, 18],
[21, 24, 27]])
>>> np.dot(a,b)#数组的点乘运算通过np.dot(a,b)来实现,相当于矩阵乘
array([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列的数组
>>> c
array([1, 2, 3])
>>> c*a#c为一行三列,放于数组a之前,则对数组a中每行对应位置相乘
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
>>> a*c#c为一行三列,放于数组a之后,依旧是对数组a中每行对应位置相乘
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
>>> #如果想要矩阵运算,则需要np.dot()函数
>>> np.dot(c,a)#c为一行三列,放于数组a之前,按正常矩阵方式运算
array([30, 36, 42])
>>> np.dot(a,c)#c为一行三列,放于数组a之后,相当于矩阵a乘以3行一列的c矩阵,返回结果值不变,格式为1行3列
array([14, 32, 50])
>>> #将c改为多行一列的形式
>>> d=c.reshape(3,1)
>>> d
array([[1],
[2],
[3]])
>>> #
>>> np.dot(a,d)#值与np.dot(a,c)一致,但格式以改变为3行1列
array([[14],
[32],
[50]])
>>> a*a#数组使用*的运算其结果属于数组运算,对应位置元素之间的运算
array([[ 1, 4, 9],
[16, 25, 36],
[49, 64, 81]])
>>> #但是不能更改a,d点乘的位置,不符合矩阵运算格式
>>> np.dot(d,a)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
np.dot(d,a)
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)
对于数组的转置,求逆,求迹运算请参考上篇文章
2.对矩阵的操作
>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a=np.mat(a)
>>> a
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b=a
>>> b
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a+b#矩阵的加减运算和数组运算一致
matrix([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
>>> a-b
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
>>> a*b#矩阵的乘用*即可表示
matrix([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
>>> np.dot(a,b)#与*一致
matrix([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
>>> b*a
matrix([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
>>> np.dot(b,a)
matrix([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
>>> c=np.array([1,2,3])#构造一行三列数组
>>> c
array([1, 2, 3])
>>> c*a#矩阵运算
matrix([[30, 36, 42]])
>>> a*c#不合矩阵规则
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
a*c
File "F:\python3\anzhuang\lib\site-packages\numpy\matrixlib\defmatrix.py", line 309, in __mul__
return N.dot(self, asmatrix(other))
ValueError: shapes (3,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
>>> np.dot(c,a)#和矩阵运算一致
matrix([[30, 36, 42]])
>>> np.dot(a,c)#自动将a转换成3行1列参与运算,返回结果格式已经变为1行3列而非3行一列的矩阵
matrix([[14, 32, 50]])
>>> c=c.reshape(3,1)
>>> c
array([[1],
[2],
[3]])
>>> a*c#和矩阵运算一致
matrix([[14],
[32],
[50]])
>>> c*a#不合矩阵运算格式
Traceback (most recent call last):
File "<pyshell#71>", line 1, in <module>
c*a
ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)
矩阵运算的另一个好处就是方便于求转置,求逆,求迹
>>> a
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a.T
matrix([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> a.H#共轭转置
matrix([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> b=np.eye(3)*3
>>> b
array([[3., 0., 0.],
[0., 3., 0.],
[0., 0., 3.]])
>>> b=np.mat(b)
>>> b.I#求逆运算
matrix([[0.33333333, 0. , 0. ],
[0. , 0.33333333, 0. ],
[0. , 0. , 0.33333333]])
>>> np.trace(b)#求迹运算
9.0
以上所述是小编给大家介绍的python中数组和矩阵乘法及使用总结详解整合网站的支持!
来源:https://blog.csdn.net/manjhOK/article/details/80017892


猜你喜欢
- 本文实例讲述了Python文件与文件夹常见基本操作。分享给大家供大家参考,具体如下:1、判断文件(夹)是否存在。os.path.exists
- 本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- 这是一款简单,方便,功能齐全的分页类,可以根据自己的需要更改CSS样式文件以实现分页颜色的控制,利用p
- 前言: 最近正在上一门Python数据处理的课程,要用到Jupyter,于是就先安装了
- 一.先看一些最简单的例子例子Table Aaid adate 1 &n
- 你一定听说过这句著名的数据科学名言:在数据科学项目中, 80% 的时间是在做数据处理。如果你没有听过,那么请记住:数据清洗是数据科学工作流程
- 这个代码不是很完善,能实现基本的功能;另外有个问题,就是divOpenWin层的定位问题:发现如果其属性设置成display:none,那么
- 脚手架(vue-cli)(一)什么是脚手架概念:是一种用于快速开发Vue项目的系统架构优点:能够帮助咱们快速的开发项目缺点:由于脚手架适用于
- 这是写给web设计者和前端开发者的教程,我们将演示如何使用Photoshop创建按钮的sprite图,然后是如何使用jQurey打造动态渐变
- 看看效果图:效果图功能点:支持不限城市,不限地区(这个东西的实现..真心死磕了挺久) – 左右两边数据的同步地区一次性多选,若是选择了所有地
- 使用pycharm创建新项目,使用虚拟环境,但是进入到项目的cainiao_guoguo_health\venv\Scripts目录启动虚拟
- 用python实现五子棋简单人机模式的练习过程,供大家参考,具体内容如下第一次写博客,我尽力把它写好。最近在初学python,今天就用自己的
- 目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了。首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己
- PHP PDO连接连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。连接到 MySQL<?php
- 本文实例讲述了python实现一次创建多级目录的方法。分享给大家供大家参考。具体实现方法如下:import osos.makedirs( &
- 英国著名学者李约瑟早在100多年前就疑惑:为什么中国的科技在唐宋时代就已领先西方,却在明清时代落后下来。对此,人们一向认为这主要是儒家思想的
- Protocol Buffers (类似XML的一种数据描述语言)最新版本2.3里,protoc—py_out命令只生成原生的P
- 在进行小数计算的时候使用float,经常会出现小数位不精确的情况。在python编程中,推荐使用decimal来完成小数位的精度计算。dec
- 最近在使用layui前端框架,在使用单选按钮、下拉菜单select、checkbox等控件的时候 往往遇到一些初始化的东西。有时候会发现,自
- 前言相比常用的 os.path而言,pathlib 对于目录路径的操作更简介也更贴近 Pythonic。但是它不单纯是为了简化操作,还有更大