Python 矩阵相关
Python 中矩阵运算主要使用numpy库。NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数索引的元素表格(通常是元素是数字)。因此对于随机查找来说,比python自带的list快很多。
在numpy里面通常使用两个变量:array和matrix。其实python标准类库中也有array,但是它的功能相对numpy的少很多,所以不用。matrix是array的分支,matrix可以看做二维的array,array可以是多维,matrix和array在很多时候都是通用的。官方建议如果两个都可以用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵。但是matrix的优势在于,它相对于array使用的符号更简洁一些。
矩阵和向量的创建
a = np.array([2,4,5,6,7])
如上创建了一个1*5的一行5列的array,这就相当于一个行向量(实际上不是,应该用np.array([[2,4,5,6,7]])创建)。
m = np.matrix([[1,2,4,5,6],[5,6,8,9,4]])
如上创建了一个2*5的matrix,这就是一个2*5的矩阵。
另外矩阵还可以通过这个创建:
m = np.mat([[1,2,4,5,6],[5,6,8,9,4]])
mat和matrix的相关之处是,mat([])就等同于matrix([],copy=false),而matrix([])实际上默认copy=true。
所以如果想引用一个矩阵,如m,可以使用a = mat(m),或者a = matrix(m,copy=false)。当然用[]列表来新创建一个矩阵的时候它们是完全一样的。
矩阵的转置
m = m.transpose()
m = m.T
matrix和除一维外的array(甚至高维,尽管不清楚转置机制,但暂时用不上所以先不研究)可以通过这个两个进行转置(T和transpose不同点暂时不研究了)。
但是一维的array,它不是矩阵,也不是向量,所以不能通过transpose来转置。
因为在计算机里,二维和一维定义好以后就确定下来用几个索引标志来索引了。
而向量从功能上来看,应该被看做1行或1列的矩阵,所以它应该是二维的。就是说我们索引它的某个元素,比如行向量a的第3个元素,我们应该用a[1][3],而不是a[3]。
所以a = np.array([2,4,5,6,7])创建的其实啥也不是,像np.array([[2,4,5,6,7]])这样创建二维的才算真正意义上的行向量,也就能用transpose()来转置了。
如果用a = np.array([2,4,5,6,7,1,3,8])创建了一行数组a,想变成向量,就用reshape()函数来将它变成二维的向量。
reshape()函数
a = a.reshape([1,8])
把a转换为了二维的1行8列的行向量,即使a原来是一维数组。
a = a.reshape(8)
这样就又转回了原来一维的8元素的数组。
甚至还可以a = a.reshape([2,2,2])
变成了2*2*2的三维的立方阵。
另外,如果赋值给一个新变量:
b = a.reshape([2,2,2])
a的shape没变,b是2*2*2的立方阵,而且它们共享内存,即a改变它的元素值,b也会改变。
矩阵乘法
乘法有三种表达方式:*、dot()、multiply()
np.multiply()
数组或矩阵的对应位置元素相乘。
np.dot()
对于一维数组array,执行对应位置相乘,然后再求和;对于秩不为1的二维数组(array)、矩阵(matrix),执行矩阵乘法运算(超过二维的可以参考numpy库介绍)
乘法运算*
对数组array执行对应位置元素相乘(相当于 np.multiply() 函数),对矩阵matrix执行矩阵乘法运算(相当于 np.dot() 函数)。就是multiply()和dot()的融合。
幂运算**
相当于多个array或matrix执行*,即A**3=A*A*A。
总结
multiply()全都是对应元素相乘;dot()是矩阵乘法,而一维array是对应元素相乘后之和;*对array是对应元素相乘,对matrix是矩阵乘法。
相对来说matrix注重矩阵操作,array注重阵列操作(阵中元素对应进行运算)
Python 矩阵相关的更多相关文章
- Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2
//2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...
- python数组相关知识
1.np中的reshape函数,可以把矩阵重新划分成m行n列. arange(n)可以把 [0,n-1]装入数组中,一定要注意的是img.reshape()并不会改变原来的数组,所以需要另外新建一个数 ...
- python文件相关操作
Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...
- Mac os 下 python爬虫相关的库和软件的安装
由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装: 1. h ...
- Python内存相关
Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...
- Python 矩阵(线性代数)
Python 矩阵(线性代数) 这里有一份新手友好的线性代数笔记,是和深度学习花书配套,还被Ian Goodfellow老师翻了牌. 笔记来自巴黎高等师范学院的博士生Hadrien Jean,是针对& ...
- python 日期相关的各种操作总结
用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的功能,动不动就要去查python手册,感觉麻烦,因此把自己常用的一些东西,总结了一下,总体说来到目前为止遇到如下一些需求: 1. 用 ...
- Python 异常相关参考
Python所有的异常都是从BaseException类派生的,常见的错误类型和继承关系如下: BaseException +-- SystemExit +-- KeyboardInterrupt + ...
- Python编写相关注意事项
1.# -*- coding: utf-8 -*-代码首部添加这个,不然会报Non_ASCII charater错误 python闭包:实际应用场景1.保持闭包运行完后的环境: 2.根据外部作用域的局 ...
随机推荐
- Spring Boot RestApi 测试教程 Mock 的使用
测试 Spring Boot Web 的时候,我们需要用到 MockMvc,即系统伪造一个 mvc 环境.本章主要编写一个基于 RESTful API 正删改查操作的测试用例.本章最终测试用例运行结果 ...
- Linux新手常用命令
Linux下有时候需要转换到管理员权限 su root 然后输入密码 或者直接 su ---------------------------------------- 但可能存在鉴定错误的异常 ...
- 14.浏览器屏幕缩放bug修复
问题:浏览器缩放时,轮播图显示不全,滚动水平滚动条,发现图片缺失 解决:隐藏水平滚动条,页面都只提供垂直滚动条的需求 global.css /* 水平超出部分默认隐藏 */ #app { overfl ...
- Python学习笔记010
倒三角 num2 = int(input("Line:")) while num2 > 0: num1 = num2 while num1 > 0: ...
- C语言-错误处理
标记程序的运行状态和控制主要有以下几种:break/continue/return/参数的返回值/exit(int n)_exit() atexit((*p)(参数列表)): 1 break:用在开关 ...
- 如何删除 AppStore 中的恶意评论 iOS
AppStore 中的评论,对于产品的形象影响很大.如果评论榜中出现了恶意评论,会对产品形象影响很大,当然这些差评有可能是用户的真实反馈,需要产品设计人员做好产品设计,满足客户的需求.另外也可能是竞争 ...
- 【译】高级T-SQL进阶系列 (二)【下篇】:使用 APPLY操作符
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 使用OUTER APPLY 操作符 OUTER APPLY操作符工作起来和CROSS APPLY比较类似.唯一的 ...
- adblock广告过滤
1.在 img的 src中 出现 ad连在一起的情况,会被adblock过滤掉. 例如 <img id="adasdd" class="ad_mina" ...
- [ DLPytorch ] 循环神经网络进阶&拟合问题&梯度消失与爆炸
循环神经网络进阶 BPTT 反向传播过程中,训练模型通常需要模型参数的梯度. \[ \frac{\partial L}{\partial \boldsymbol{W}_{qh}} = \sum_{t= ...
- Python实现一个LRU
class Node: key = None value = None pre = None next = None def __init__(self, key, value): self.key ...