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模块的更多相关文章

  1. python numPy模块 与numpy里的数据类型、数据类型对象dtype

    学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...

  2. python numpy 模块简单介绍

    用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...

  3. [Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组

    <Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...

  4. python numpy模块使用笔记(更新)

    np.arange(int a) 生成一个一维array,元素个数是a个,元素是0到a-1 注意arange不能直接生成多维array np.arange(int a).reshape(int b,i ...

  5. Python Numpy模块函数np.c_和np.r_

    np.r_:是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_:是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的 ...

  6. 3 numpy模块

    Numpy     什么是Numpy:Numeric Python         Numpy模块是Python的一种开源的数值计算扩展.             1 一个强大的N维数组对象Array ...

  7. Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块

    基本运算 x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方 inf:表示正无穷 逻辑运算符:and,or,not 字典的get方法 a.get(k,d) 1 1 get相当于一条if ...

  8. 【Python 数据分析】Numpy模块

    Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~g ...

  9. Python及bs4、lxml、numpy模块包的安装

    http://blog.csdn.net/tiantiancsdn/article/details/51046490(转载) Python及bs4.lxml.numpy模块包的安装 Python 的安 ...

随机推荐

  1. Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录

    [翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...

  2. mysql 5.1 在Windows下重置root 用户密码

    在windows下:打开命令行窗口,停止mysql服务(这里不用进入mysql目录): net stop mysql 进入mysql安装目录的bin文件夹下 执行: mysqld --skip-gra ...

  3. MapReduce作业的执行流程

    MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...

  4. Control中的AOP实现非业务需求

    一.能够使用Control中的AOP实现非业务需求的功能 本文目录 一.ActionFilterAttribute类 二.实现自定义Attribute 一.ActionFilterAttribute类 ...

  5. JAVA基础之转换流和缓冲流

    个人理解: 在理解的字符流和字节流的区别后.要是想读取指定的编码格式的文件时,特别是不是默认的格式时,就需要转换流了,需要注意的是字符流是需要清除缓冲区的:当需要快速的进行读取时,则需要缓冲流.存在即 ...

  6. springboot集成shiro实现验证码校验

    github:https://github.com/peterowang/shiro/ 这里实现验证码校验的思路是自己添加一个Filter继承FormAuthenticationFilter,Form ...

  7. Mind must be master of the body, strong mind can separate the body from its suffering.

    Mind must be master of the body, strong mind can separate the body from its suffering.意志是身体的主人,有顽强的意 ...

  8. Hive的HQL(2)

    Hive基础(1) Hive的HQL(2) 1. HQL的数据定义,HQL是一种SQL方言,支持绝大部分SQL-92标准.但是和SQL的差异为:不支持行级别的操作,不支持事务等.HQL的语法接近于My ...

  9. Oracle关于TX锁的一个有趣的问题

    前阵子有一个网友在群里问了一个关于Oracle数据库的TX锁问题,问题原文如下: 请教一个问题: 两个会话执行不同的delete语句,结果都是删除同一个行.先执行的会话里where条件不加索引走全表扫 ...

  10. informix服务端卸载后重新安装不成功

    可能原因: 1.实例未删除 2.配置文件未删除 安装成功后远程客户端连接不上问题: 1..如果自己设置的数据库实例报错,换一个数据库实例(database)试试,例如sysadmin