python numpy库作用_python Numpy库

一.导入库

import numpy as np

二.创建

1.numpy中只有一种数据类型:ndarray,表示n维数组

创建ndarray数组:

-由列表或者元组类型创建数组

-有元组类型创建数组

-创建特殊数组

2.采用np.array函数来创建,语法为:

np.array(列表或元组)

将参数列表或者元组转换成ndarray类型.相当于强制类型转换

a=np.array([1,2,3,5,19]) 由列表创建一维数组

b=np.array([[1,1,1],[2,2,2],[3,3,3]]) 由列表创建二维数组

a=np.array((1,2,3,5,19)) 由元组创建一维数组

b=np.array(((1,1,1),(2,2,2),(3,3,3))) 由元组创建二维数组

b=np.array(([1,1,1],(2,2,2),[3,3,3])) 混搭的。。。

创建数组时,可以用dtype指定数据类型:

a=np.array([1,2,3,5,19],dtype=np.int32)

当不指定dtype的时候,numpy会根据数据自动匹配合适的类型

三.数组类型的属性

生成一个数组 : b=np.array([[1,1,1],[2,2,2],[3,3,3]])

.ndim:数据是几维的:b.ndim的值为2

.shape:数据的形状,即尺寸:b.shape的结果为(3,3)

.size: 数组中元素的数量 b.size的值为9

.dtype: 数组元素的数据类型 b.dtype 的结果为 int32

.itemsize:数组中元素所占的字节数

四.利用函数创建特殊数组

1.全零数组

①np.zeros(shape, dtype = float)

shape为数组的形状,是列表类型或者元组类型

dtype是数据的类型,可以是整数或者实数,该参数可以省略

例子:a=np.zeros((3,3),dtype=int),则a里面是一个3*3的全零数组

②np.zeros_like(a)

a为一个已知的数组,np.zeros_like(a)生成一个与a形状相同的全零数组

a=np.array([[1,2],[2,3],[3,5]]) # a是一个三行两列的矩阵

则np.zeros_like(a) 生成一个三行两列的全零数组

2.全1数组

①numpy.ones(shape, dtype)

np.ones: 创建指定形状的数组,数组元素以 1 来填充

例如:np.ones([5,5],dtype=np.int32) #五行五列全是1的数组

②np.ones_like(a)

参数a为一个已知的数组,该函数根据数组a的形状生成一个全1的数组

3.全是某个值的数组

①np.full(shape,fill_value)

根据指定的shape生成一个全是fill_value的数组

例如:np.full((4,7),8) #四行七列全是8的数组

②np.full_like(a,8) 生成一个与数组a相同,且里面元素都是8的数组

5.np.eye生成单位矩阵

np.eye(n)

生成一个n行n列的单位矩阵

6.np.arange选定数值范围创建数组

语法 np.arange(start, stop, step, dtype)

start :起始值,默认为0

stop : 终止值(不包含)

step : 步长,默认为1

dtype :类型,可以省

例子:

np.arange(10)          #输出array([0,1,2,3,4,5,6,7,8,9])

np.arange(2,15)         #输出array([2,3,4,5,6,7,8,9,10,11,12,13,14])

np.arange(3,20,5)        #输出array([3,8,13,18])

c=np.arange(9).reshape(3,3)#输出array([[0, 1, 2],

[3, 4, 5],

[6, 7, 8]])

注意:使用np.arange生成的数组都是一维的,如何变成多维呢?使用数组的reshape方法

例如:np.arange(100).reshape(10,10)

方法的调用!!!! 用变量名.方法名

七.创建线性一维数组

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start : 序列的起始值

stop : 序列的终止值,如果endpoint为true,该值包含于数列中

num : 要生成的等步长的样本数量,默认为50

endpoint : 该值为True时,数列中包含stop值,反之不包含,默认是True

retstep : 如果为True时,生成的数组中会显示间距,反之不显示

dtype : ndarray的数据类型

例如:a = np.linspace(1,10,10) array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

八.生成随机数组

1.numpy中有个随机数子库,叫做np.random。

里面包含很多随机数生成算法,使用的时候,采用 np.random.方法名 的形式去使用。

①np.random.rand(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间均匀分布的随机数组。

②np.random.randn(d0,d1,...dn) 根据d0,d1,...dn的值生成[0,1)之间标准正太分布的随机数组。

③np.random.randint(low,high,shape)在[low,high)区间生成shape形状的随机数组

例如:np.random.randint(1,10,[5,5])

np.random.randint(1,10) 生成1-10之间的随机整数(一个整数)

④np.random.seed(s) 随机数种子函数 : 参数必须是整数类型

⑤np.random.shuffle(a) 把数组a打乱顺序

⑥np.random.choice(a,size,replace=False)

解释:从数组a中,随机等概率选取数据,构成shape形状的数组。

当replace的值默认为True,此时,数据可以被重复选取,当不希望重复选取数据的时候,修改replace=False

⑦np.random.uniform(low,high,size):在[low,high)之间等概率的抽取元素,产生形状为size的数组。

⑧np.random.normal(loc,scale,size):产生均值为loc,方差为scale的尺寸为size的符合正态分布的数组

⑨np.poisson:生成泊松分布的数组

九.数组的变换-改变形状

1.reshape函数: 改变数组的形状,不改变数组元素的个数,原数组不变,生成一个和原数组数据一样的新数组。

有两种reshape。一种是np的函数,一种是数组的方法.

假设a=np.arange(100), 则a为含有100个元素的一维数组。则改变a为10*10的数组,

方法有:

b=np.reshape(a,(10,10))   # np的函数

b=a.reshape(10,10)     # 数组的方法

b=a.reshape((10,10))

执行完上面的代码后,b为10*10的数组,而a还是含有100个元素的1维数组

2.resize((shape),refcheck=True) #refcheck默认是true,自身调用时须改成false

功能与reshape相同,但是改变原数组

a.resize((1,9)) a变为一维数组了。

①当resize()是用np调用的时候,这时需要第一个参数是矩阵本身,然后记得加括号,是改正后 的矩阵维度, 这时有返回值,可以打印出

例如:>>>a=np.arange(100)

>>> b=np.resize(a,(1,9))

>>> b

输出:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])

②当resize()是矩阵自己调用自己时,函数没有返回值,因此是None,但是也改变了ndarray的值,

这时再打印ndarray就是被resize()改变后的值 ***自身调用时,refcheck=False

例如:>>>a=np.arange(100)

>>>a.resize((1,9),refcheck=False)

>>>a

结果:array([[0, 1, 2, 3, 4, 5, 6, 7, 8]])

十.数组的变换-扁平化

1.flatten()函数,数组扁平化,也就是把多维数组变成一维数组,但是原数组不变。

假设a是一个二维数组,则a.flatten(),得到一个按行展开的一维数组

例如:>>>a=np.random.randint(1,5,[3,3])

>>>a

结果:array([[4, 2, 2],

[4, 1, 1],

[1, 3, 2]])

>>>a.flatten()

结果:array([4, 2, 2, 4, 1, 1, 1, 3, 2])

>>>a

结果:array([[4, 2, 2],

[4, 1, 1],

[1, 3, 2]])

2.a.astype()函数 改变类型的函数

b=a.astype(np.float16),生成一个新数组,新数组中与原数组元素相同,类型不同。

注意:原数组类型不发生变化

例如:>>>a=np.random.randint(1,5,[3,3])

>>>a

结果:array([[4, 2, 4],

[2, 3, 4],

[1, 1, 4]])

>>>a.astype(np.float16)

结果:array([[4., 2., 4.],

[2., 3., 4.],

[1., 1., 4.]], dtype=float16)

>>>a

结果:array([[4, 2, 4],

[2, 3, 4],

[1, 1, 4]])

3.a.tolist()函数 把数组a变成列表

a.T 与a.transpose() 数组的转置 ,都不改变原数组

例如:>>>a=np.random.randint(1,5,[3,3])

>>>a

结果:array([[4, 4, 4],

[3, 4, 2],

[3, 3, 1]])

>>>a.tolist()

结果:[[4, 4, 4], [3, 4, 2], [3, 3, 1]]

>>>a.T

结果:array([[4, 3, 3],

[4, 4, 3],

[4, 2, 1]])

>>>a.transpose()

结果:array([[4, 3, 3],

[4, 4, 3],

[4, 2, 1]])

>>>a

结果:array([[4, 4, 4],

[3, 4, 2],

[3, 3, 1]])

十一.常用函数及其使用

1.统计函数

使用方法:①np.函数名 ②数组变量.函数名

sum

求和

mean

求平均值

std

求标准差

var

求方差

median

求中位数

max

求最大值

min

求最小值

average()

加权平均数

举例:

求和:

np.sum(a) 和 a.sum(): 求数组a中所有元素的和。

np.sum(a,axis=0)和 a.sum(axis=0) : 对数组a按行求和

np.sum(a,axis=1)和 a.sum(axis=0) : 对数组a按列求和

求均值

np.mean(a)和a.mean() 求数组a中所有元素的均值

np.mean(a,axis=0)和a.mean(axis=0) 求数组a中所有列的均值

np.mean(a,axis=1)和a.mean(axis=1) 求数组a中所有行的均值

其它统计函数的用法类似

2.数学函数

np.sin()

正弦

np.cos()

余弦

np.tan()

正切

np.arcsin()

反正弦

np.arccos()

反余弦

np.arctan()

反正切

np.degree()

将弧度转换为角度

np.ptp(a)

计算数组a种最大值与最小值的差

3.舍入函数

np.around()

四舍五入

np.floor()

向下取整

np.ceil()

向上取整

4.排序函数

np.sort(a, axis, kind):对数组a按axis所指定的轴进行排序,排序采用kind参数指定的算法。kind参数可以省略

十二.数组的索引与切片

1.一维数组的索引和切片

索引:a[0],a[-1]

切片:数组名[起始位置:结束位置:步长] a[1:10:2]

2.多维数组的索引和切片

索引:a[0,5,7] 多个维度之间用逗号分隔。

a[0,5,7]表示 第一维数据,选第0个,第2维数据,选第5个,第三维数据,选第7个

切片: ①选择多行: a[起始行:结束行]

②格式: a[m:n,p:q] 第一维选择m到n行,不包括n,第2维选择p到q列,不包括q

3.列表做索引:

①选择多行,把多行包装成列表,作为索引,

如:a[[0,3]]表示选择第0行和第3行。当选择整行,不考虑列的时候,可以不写列

②np.ix_函数: 能把两个一维数组 转换为 一个用于选取方形区域的索引器。

实际意思就是,直接往np.ix_()里扔进两个一维数组[1,3],[2,4,5],就能先选1,3行,再选2,4,5列。

④布尔索引--条件索引

大于5的数: a[a>5]

能被5整除的数a[a%5==0]

既能被2整除,又大于5的数:b=a[a%2==0] c=b[b>5]

十三.ndarray类型数据的运算

1.数组与标量(单个数据)之间的运算:相当于数组中的每个元素与标量之间的运算,例如:a=np.arange(10).reshape(2,5) a+5,相当于a中每个元素都加了5,

2.数据规范化

如何规范化:随机生成一个二维数组,对数组进行规范化,即数组中每个元素减去数组元素的均值除以数组元素的方差:

a=a.mean()/a.std()

3.numpy中一元函数:作用到元素上

对数组运算,实际上是对数组中每个数据进行运算。

np.abs() 求数组中各个元素的绝对值,结果可以是整数或者实数

np.fabs() 求数组中各个元素的绝对值,结果是实数

np.sqrt() 求数组中各个元素的平方根

np.log np.log10 np.log2 计算数组中各个元素的自然对数、以10为底的对数, 以2为底的对数

np.ceil()和np.floor分别表示的是对数组中各个元素进行取整

np.rint()对数组中每个元素进行四舍五入

np.sin() np.cos() np.tan() np.cosh() np.sinh() np.tanh() 对数组中的每个元素进行三角运算。

np.sign() 计算数组中每个元素的符号值,结果为1,0,或-1分别表示正数,0和负数

np.exp() 计算数组中每个元素的指数值

4.numpy中的二元函数和二元运算

两个同尺寸的数组加减乘除,相当于对应元素的加减乘除

np.maximum(a,b) 求两个数组a和b对应元素的最大值

np.minimum(a,b) 求两个数组a和b对应元素的最小值

np.mod(a,b) a中元素除以b中元素的余数

np.copysign(x,y) 将数组y中各元素的符号赋值给x中元素的符号

关系运算符号:> 、>=、< 、<= 、 ==、 !=对应元素进行比较

a[a>b] 在a中找出比数组b大的数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值