01 - numpy

numpy

介绍

numpy.genfromtxt

numpy 是专门用来做矩阵的计算的,当然还有很多的用处

import numpy
world_alcohol = numpy.genfromtxt("world_alcohol.txt", delimiter=",",dtype=str)

在上面使用numpy.genfromtxt读取文件的时候,我们使用delimiter指定了使用逗号进行分隔,并且指定将读取的数据默认使用str进行存储(通常情况下使用的就是str)
numpy.genfromtxt使用
在上面打印的结果可以看到,存入进去的world_alcohol的数据类型是numpy.ndarray,这个类型是numpy存储数据的类型
对于上面打印出来的内容,其实就是一个矩阵,对应的有行和列

numpy.array

在numpy中间,最核心的东西就是numpy.array

vector = numpy.array([5, 10, 15, 20])
matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])

如上,使用numpy.array就能够构造出矩阵了,如果是一个一维的,则直接放入一个列表即可,如果是一个二维的,则对应的是两个中括号,后面依次往后推,如下图所示
numpy.array使用

.shape

在日常情况下,使用挺多的就是对一个矩阵使用shape方法,可以直接看到这个矩阵的结构是怎样的(行和列各是什么样的)
shape的使用

dtype

在学习python中间list的时候,我们知道,在这个list中间是可以传入不同类型的值的,但是在numpy.array的时候,中间传入的值必须是同一个类型的值
dtype
上面使用numpy.array传入的内容是[1,2,3,4],可以看到都是整型的数据,使用dtype进行展示,可以看到是int64的数据类型,如果我们将中间的4变成4.0的话,就会是如下的情况
在这里插入图片描述
可以看到,仅仅是改变了中间一个4的值,整个数据类型都变了,成为了浮点型的数据,同样,我们改变中间一个数据类型,其他的数据类型都会发生变化

数据选取

python的list中间,在进行取数据的时候,通常都是通过索引去取的,在numpy中间也是一样的(通过索引获取数据)
数据获取
除了如上面所示获取单个数据以外,其实我们也是可以和list中间一样,获取一个数据的切片的
数据切片
上面操作的对象是一个一维的数据,如果是二维的数据呢?此时我们想取中间的某一列的数据
数据切片
如上,对于这个矩阵,就将中间第二列的数据取出来了

判断矩阵中的数据

如果给定了一个矩阵,如果想要获取到该矩阵中间是否有与指定的值相等的值,可以使用下面的方式
在这里插入图片描述
返回的结果要么是True,要么是False,可以看到,第二个对应的是True,说明第二个数是等于10的(返回的类型是一个bool类型)
在这里插入图片描述
同样,对于二维的矩阵也是一样适用的
在上面,我们获取到了bool类型的数据,如果我们想将中间的内容打印出来呢?
在这里插入图片描述
在这里插入图片描述

‘与’ 与 ‘或’判断

‘与’ 运算
在这里插入图片描述
上面进行的是‘与’运算,在这个运算中,中间使用一个 & 符号进行连接,可以看到最后输出的内容都是False

‘或’ 运算
在这里插入图片描述
可以看到,执行或运算的时候,前面的两个值变为了True

arange与reshape

我们可以使用arange创造出一个向量,之后使用reshape将其转换为一个矩阵
在这里插入图片描述
如上,使用arange创造出了0到14的一个向量,之后使用reshape将其转换为3行5列的一个矩阵
这里arange除了上面的这种操作之外,还存在下面这样的方式
在这里插入图片描述
这里表示的就是从10开始,到30结束,步长为5;这里是小于30,但是不能等于30

在上面使用reshape的时候,指定了行和列,其实并不需要将行和列都写上,可以仅仅写上一个行数就行了
在这里插入图片描述
上面reshape的时候,指定了行是6,列写的为-1(自动计算)

shape与ndim

使用shape可以看一个矩阵的全貌(几行几列),通过ndim可以看到这个矩阵是几维度的
在这里插入图片描述
在上面的截图中,可以看到a这个矩阵是3行5列的,同时a这个矩阵是2个维度的

dtype.name与size

在这里插入图片描述
使用dtype.name可以获取a这个矩阵中间存储的数据类型是int类型的;使用size可以看到a这个矩阵中间的数据量

zeros

可以使用zeros初始化一个全部为0的矩阵
在这里插入图片描述

ones

使用ones初始化一个全部为1的矩阵
在这里插入图片描述

random

在numpy中间random这个模块比较重要,这是一个随机模块
在这里插入图片描述
在random中间的2,3表示的是2行3列的矩阵,这里的值的取值范围是从-1到+1之间的值

linspace

在这里插入图片描述
这里首先从numpy中间import了pi,下面使用linspace进行取值,意思为从0到2pi之间平均取100个值

矩阵运算

在这里插入图片描述
首先使用numpy的array创建了一个向量,同时使用arange创建了一样维度的向量,之后使用a向量减去b向量,这样得到的一个结果,可以看到,减的时候是逐个进行减的。同样还有平方和判断

dot

在这里插入图片描述
上面例子中,进行了乘法的运算,但是前后两种方式并不相同,一种是简单的AB,这样表示的内容是对应位置的相乘;第二种使用了dot,这样乘法就是矩阵的乘法,第一行乘以第一列的结果放在第一个位置:12+1+3 = 5,按照这样的方式进行

floor

使用floor可以对数进行向下取整的操作,例如2.2向下取整为2,2.9向下取整为2
在这里插入图片描述

ravel

前面讲到使用reshape可以将一个向量转换为一个矩阵,那么同样也是可以从一个矩阵转换为一个向量的,这里用到的是ravel
在这里插入图片描述
这里已经将一个3行4列的矩阵转换为一个向量,转换完成之后,同样还是可以进行后续的操作的
在这里插入图片描述

矩阵的拼接

hstack

在这里插入图片描述
如上,使用hstack就能够将a和b横着进行拼接;既然存在有横着拼的方式,同时也是存在有列着拼的方式

vstack

在这里插入图片描述

矩阵的切分

hsplit

在这里插入图片描述
如上,使用hsplit将a这个矩阵进行切分(按行)
除了上面这样的切分方式以外,还可以指定切分的地方进行矩阵切分
在这里插入图片描述
上面这样的切分方式就是在行中的第3的位置和第4的位置进行切分

vsplit

在这里插入图片描述

关于复制

“=” 进行复制

在这里插入图片描述
在上面首先使用np.arange(12)生成了一个向量,使用一个赋值符号将a赋值给b,将b进行shape,发现a也变了,发现此时a和b都是相同的
注意:这里表面上a和b的名字不相同,但是其实两者指向的是同一个内存空间

view() 浅层复制

在这里插入图片描述
上面的c是使用a.view()进行复制的,使用c is a可以判断出c和a两者并不是同一个值(返回的结果是False),这里将c的shape置为2,6,可以看到a的shape并没有发生变化;此时将c中间的一个值进行设定,可以看到a中间的代表的同一个内容的地方也发生了变化
结论:浅复制虽创建了一个新的变量,但是内部数据是共用的一套值

copy()

在这里插入图片描述
使用copy之后,就会创建一个全新的数据空间,此时修改其中一个,并不会影响到另一个

排序和索引

argmax

在这里插入图片描述
使用argmax能够获取最大值对应的索引,注意:这里的axis为0,表示的从列进行分析,从每一列中间获取到最大的值
前面已经获取到了值最大对应的索引,下面使用如下的方式就能够将对应的值进行一个展示
在这里插入图片描述

tile

使用tile能够将一个已有的向量或矩阵进行扩展
在这里插入图片描述
如上,首先使用arange构建了一个0到40(小于40),步长为10的向量;使用tile将这个向量的行数变为4倍,列数变为3倍

sort

这里使用sort进行排序
在这里插入图片描述
上面可以看到在使用sort的时候,axis=1,表示的是对每一行进行排序

argsort

在这里插入图片描述
这里需要注意,使用argsort的时候,是获取一个向量或者矩阵从最小值到最大值的索引序列,后面使用a[j]即可获取到这些索引对应的值

猜你喜欢

转载自blog.csdn.net/Escid/article/details/90578241