python numpy模块
numpy模块
回顾一下有哪些数据类型
int/float/str/list/tuple/dict/set
numpy是python一种开源的数值计算扩展库.这种库可用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵)
作用:
1.区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型
2.计算速度快,甚至优于python内置的简单运算,使其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似
矩阵即numpy的np.array对象,创建矩阵就是把列表传入np.array()
import numpy as np
一维数组
- 只有一行
- 相当于一条直线
lis =[1,2,3]
lis
[1, 2, 3]
np.array(lis)
array([1, 2, 3])
二维数组(用的最多的)
- 有行有列
- 相当于一个面,里面有多条线,一个列表里装了多个一维
arr = np.array([ [1,2,3,4], [5,6,7,8] ])
arr #在pycharm中需要print(arr)
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
学习numpy的方法使用,先来联想一下list的内置方法使用
1.索引
2.切片
3.长度
4.成员运算
5.for循环
6.其他一些内置方法
比较一下 np.array 和 list 的区别
1.np.array是多维的,list是一维的
2.list对一维数组做一些操作,numpy其实就是对多维做操作
获取多维数组的行和列
arr =np.array([ [1,2,3,4],[5,6,7,8],[5,6,7,8]])
arr
array([[1, 2, 3, 4],
[5, 6, 7, 8],
[5, 6, 7, 8]])
arr.shape #获得多维数组的行和列,以元组形式表现出来
(3, 4)
arr.shape[0] #多维数组的行
3
arr.shape[1] #多维数组的列
4
print(arr.shape)
print(arr.shape[0])
arr.shape[1]
(3, 4)
3
4
arr.shape
arr.shape[1]
arr.shape[0]
3
arr.shape ,按照代码运行,直接运行最后一个结果显示处理,用print方法就可以把每一个方法打印出来
多维数组的索引
lis = [1,2,3,4]
#lis[-1]
lis[3]
4
arr
array([[1, 2, 3, 4],
[5, 6, 7, 8],
[5, 6, 7, 8]])
arr #jupyter中前面运行的结果可以直接用,如果前面arr未运行生成,就会报错
- 中括号中加索引,行和列用逗号分开,可以取到数组中的数
arr[1,1] # 行和列索引都从0开始,取第2行第2列
6
arr[0,[0,1,2,3]] #第一行,第1,2,3,4列的数
array([1, 2, 3, 4])
arr[0,:] #第一行,第1,2,3,4列的数
array([1, 2, 3, 4])
arr[0:] #没有逗号的时候取出了全部
array([[1, 2, 3, 4],
[5, 6, 7, 8],
[5, 6, 7, 8]])
arr[:,0] #所有行,第1列的数
array([1, 5, 5])
高级功能
- 有一个多维数组存储的是人的年龄,表格里有200岁以上的年龄
arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
arr
array([[1000, 2, 300, 4],
[ 5, 600, 7, 8],
[ 5, 6, 700, 8]])
arr>200
array([[ True, False, True, False],
[False, True, False, False],
[False, False, True, False]])
arr[arr>200] #取出数组中大于200的元素,并一维数组表现出来
array([1000, 300, 600, 700])
多维数组的元素的替换
lis =[1,2,3,4]
lis[0]=9
lis
[9, 2, 3, 4]
arr
array([[1000, 2, 300, 4],
[ 5, 600, 7, 8],
[ 5, 6, 700, 8]])
arr[1,1]=0
arr
array([[1000, 2, 300, 4],
[ 5, 0, 7, 8],
[ 5, 6, 700, 8]])
arr[0,:]=0
arr
array([[ 0, 0, 0, 0],
[ 5, 0, 7, 8],
[ 5, 6, 700, 8]])
arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
arr
array([[1000, 2, 300, 4],
[ 5, 600, 7, 8],
[ 5, 6, 700, 8]])
arr[arr>200]=0 #数组中大于200的数替换成了0
arr
array([[0, 2, 0, 4],
[5, 0, 7, 8],
[5, 6, 0, 8]])
## 多维数组的合并
arr1=np.array([ [1,2,3,4],[5,6,7,8]])
arr1
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr2=np.array([ [9,10,11,12],[13,14,15,16]])
arr2
array([[ 9, 10, 11, 12],
[13, 14, 15, 16]])
* vstack 和 hstack 只能放一个参数,这个参数必须是容器
np.vstack((arr1,arr2)) #vertical 垂直新的
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
np.hstack((arr1,arr2)) #horizon 水平的
array([[ 1, 2, 3, 4, 9, 10, 11, 12],
[ 5, 6, 7, 8, 13, 14, 15, 16]])
np.concatenate((arr1,arr2)) # concatenate 连接的意思,默认垂直合并
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
==在numpy中,为了统一做处理,只要有axis参数的,axis=0就是列,axis=1就是行
np.concatenate((arr1,arr2),axis=1) #水平
array([[ 1, 2, 3, 4, 9, 10, 11, 12],
[ 5, 6, 7, 8, 13, 14, 15, 16]])
np.concatenate((arr1,arr2),axis=0)#垂直,默认垂直
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
通过函数方法创建多维数组
[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1,10,2)
array([1, 3, 5, 7, 9])
# ones
np.ones((3,4)) #默认是浮点型
# np.ones((3,4),dtype=int)
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
np.ones((3,4),dtype=int)
# zeros
np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.zeros((3,4,5)) #5控制一维,4,5控制二维,3,4,5控制三维
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
np.zeros((3,4,5))
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
## eye
np.eye(5) #5,5 5行和5列
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
矩阵的运算
- 两个矩阵对应元素相加
- 两个矩阵对应元素相减
- 两个矩阵对应元素相乘
/ 两个矩阵对应元素相除,如果都是整数则取商
% 两个矩阵对应元素相除后取余数
n 单个矩阵每个元素都取n次方,如2:每个元素都取平方
arr1
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr2
array([[ 9, 10, 11, 12],
[13, 14, 15, 16]])
arr1+arr2
array([[10, 12, 14, 16],
[18, 20, 22, 24]])
arr1*2
array([[ 2, 4, 6, 8],
[10, 12, 14, 16]])
点乘和转置(了解) 点乘必须 m*n n *m
arr1
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr2
array([[ 9, 10, 11, 12],
[13, 14, 15, 16]])
np.dot(arr1,arr2.T)
array([[110, 150],
[278, 382]])
求逆(了解)
np.linalg.inv(np.dot(arr1,arr2.T))
array([[ 1.19375, -0.46875],
[-0.86875, 0.34375]])
最大 小值
arr1
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
arr1.max()
8
arr1.min()
1
numpy生成随机数
固定随机数,让它不随机
np.random.rand(3,4)
array([[0.20445225, 0.87811744, 0.02738759, 0.67046751],
[0.4173048 , 0.55868983, 0.14038694, 0.19810149],
[0.80074457, 0.96826158, 0.31342418, 0.69232262]])
np.random.seed(1) #永不随机,固定,如果不加,每运行一次结果都不一样
np.random.rand(3,4)
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
[1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
[3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
rs =np.random.RandomState(1) #第二种方法
rs.rand(3,4)
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01],
[1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01],
[3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
python numpy模块的更多相关文章
- python numPy模块 与numpy里的数据类型、数据类型对象dtype
学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...
- python numpy 模块简单介绍
用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...
- [Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组
<Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...
- python numpy模块使用笔记(更新)
np.arange(int a) 生成一个一维array,元素个数是a个,元素是0到a-1 注意arange不能直接生成多维array np.arange(int a).reshape(int b,i ...
- Python Numpy模块函数np.c_和np.r_
np.r_:是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_:是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的 ...
- 3 numpy模块
Numpy 什么是Numpy:Numeric Python Numpy模块是Python的一种开源的数值计算扩展. 1 一个强大的N维数组对象Array ...
- Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块
基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...
- 【Python 数据分析】Numpy模块
Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...
- Python及bs4、lxml、numpy模块包的安装
http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...
随机推荐
- 【ZROI 537】贪心题 题解
[ZROI 537]贪心题 题解 Link Solution 最大的一边直接放到一起贪心即可 着重讲小的一边 已知对于二分图匹配,其答案即为最大流 令时间集合为 \(T = {1,2,3,\dots, ...
- mybatis 日期比较
entity @JSONField(name="prj_date",ordinal=13,format="yyyy-MM-dd") private Date p ...
- REST API -- 缓存和并发
REST API -- 缓存和并发 https://www.cnblogs.com/cgzl/p/9165388.html 本文所需的一些预备知识可以看这里: http://www.cnblogs.c ...
- Hadoop数据管理
本节主要从三方面介绍Hadoop数据管理:分布式文件系统HDFS.分部式数据库HBase和数据仓库工具Hive. 1. HDFS的数据管理 HDFS是分布式计算的存储基石,Hadoop分布式文件系统和 ...
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">报错
https://blog.csdn.net/qq_36611526/article/details/79067159 今天遇到个问题 文件内引入某个资源 pom.xml头部http://maven.a ...
- thymeleaf中th:attr用法以及相关的thymeleaf基本表达式
额,有人写的很好,我直接搬了 thymeleaf中th:attr用法 1.写死的单个属性值添加 th:attr="class=btn" 2.写死的多个属性值添加 th:attr=& ...
- Sql server 查询指定时间区间工作日数、休息日数等日期操作
1.查询指定时间区间的工作日 这个主要难点是法定节假日,国家的法定节假日每年都不一样,还涉及到调休,所以我们设计一个假日表.主要字段有年份,类型(是否调休),假期日期.如下: CREATE TABLE ...
- 5.类型、值和变量-JavaScript权威指南笔记
开始变得有意思起来了,然而第三章还是以基础知识了解的角度阐释相关的概念,并没有深入到结合代码以及要实现的功能讲用法和原理的程度. 1.概论. value:程序的运行是对值的操作. type:能够表示并 ...
- 啊哈算法之宽搜BFS解救小哈
简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目——BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...
- IOS 屏幕尺寸、分辨率、点之间的相互关系
iOS 设备现有的分辨率如下:iPhone/iPod Touch普通屏 320像素 x 480像素 iPhone 1.3G.3GS,iPod ...