栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-numpy常用知识汇总

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-numpy常用知识汇总

导包

import numpy as np

引入

假如我们想将列表中的每个元素增加1,但列表不支持这样的操作:

a=[1,2,3,4]
[i+1 for i in a]
want to get:[2, 3, 4, 5]

与另一个数相加,得到对应元素相加的结果:

a=[1,2,3,4]
b=[2,3,4,5]
[x+y for (x,y) in zip(a,b)]
want to get:[3,5,7,9]

这样的操作比较麻烦,而且在数据量特别大的时候会非常耗时间。

如果我们使用Numpy,就会变得特别简单

a=np.array([1,2,3,4,5])
print(a+1)
#[2 3 4 5 6]
b=np.array([2,3,4,5])
print(a+b)
#[ 4  6  8 10]
常用方法 产生数组array

生成数组

通过方法np.array(dtype=‘’)去生成数组

a=np.array([1,2,3,4,5])

dtype='object’时,可以各种类型都存在,但是不利于后续操作

生成全0或全1数组

a=np.zeros(5) #生成全0

a=np.ones(5,dtype='bool')  #dtype设置数据类型
print(a)
#[ True  True  True  True  True]

np.zeros_like(array):生成与array结构相似的全0矩阵

np.ones_like(array):

fill方法

可以使用fill方法将数组设定为指定值

与列表不同,数组中要求所有元素的dtype是一样的,如果传入参数的类型与数组类型不一样,需要按照已有的类型进行转换。

a=np.array([1,2,3,4])
a.fill(2.5)   ##传入的参数类型会按照原数组类型进行转换
a
#array([2, 2, 2, 2])
##使用fill方法将原数组类型改变
a=np.array([1,2,3,4])
a=a.astype('float')
a.fill(2.5)
a
#array([2.5, 2.5, 2.5, 2.5])

1.生成整数序列 arange

a=np.arange(1,10,2)  ##arange(起点,终点,步长)
a

2.生成等差数列 linspace

a=np.linspace(1,19,10)   ##linspace(起点,终点,个数),此处从1开始到19结束,生成10个元素
a

3.行向量和列向量

行向量   np.r_[0:10]
列向量	  np.c_[0:10]
数组属性

1.查看类型

a=np.array([1,2,3,4])
type(a)

2.查看数据类型

a.dtype

3.查看形状,会返回一个元组,每个元素代表这一堆的元素数目

a=np.array([[1,2,4],[2,3,4]])
a.shape
#(2,3) 两行三列

4.查看数组里面元素的数目

a=np.array([[1,2,4],[2,3,4]])
a.size

5.查看数组维度

a.ndim

6.复制数组**(易错点)**

如果使用array1 = array2 这样的方式,意义为这两个指向同一块内存,所以当array1被修改时,array2也会被修改。

如果想让两个ndarray互不关联,需要采取array1 = array2.copy

7.修改数组的数据类型

array.astype()

多维数组

1.数组生成:

a=np.array([[1,2,3,4],[5,6,7,8]])
a

2.索引取值

a[1,3]  #8
a[1]  #array([5, 6, 7, 8])
a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
#array([[ 0,  1,  2,  3,  4,  5],
 #      [10, 11, 12, 13, 14, 15],
  #     [20, 21, 22, 23, 24, 25],
  #     [30, 31, 32, 33, 34, 35],
  #     [40, 41, 42, 43, 44, 45],
  #     [50, 51, 52, 53, 54, 55]])
    
    #取到第一行的第4和第5两个元素
    a[0,3:5]
    #得到最后两行的最后两列
    a[4:,4:]  a[-2:,-2:]
    #得到第3列
    a[:,2]
    #例如:取出3,5行的奇数列
	a[2:5:2,::2]
转换类型

1.asarray函数

a=np.array([1,2,3])
np.asarray(a,dtype=float)

2.astype函数

##astype方法返回一个新数组
a=np.array([1,2,3])
a.astype(float)
排序

np.sort() :默认最后的一个轴

np.argsort():返回从小到大的排列在数组中的索引位置

np.searchsorted(array,values): 查看values在array中应该大小在哪个位置

np.lexsort([b,a]):先以a进行排序,a相同的话以b进行排序

array1 = np.array([[1, 2, 3],
                   [7, 5, 3],
                   [4, 8, 6]])
index = np.lexsort([-1*array1[:, 0], array1[:, 2]])#-1表示倒序
print(array1[index])
数学操作

np.sum(array,axis=)

多维数组
axis=0(第一个轴):表示对每列进行求和
axis=1(第二个轴):表示对每行进行求和

np.prod():相乘

np.mean():平均值

np.min()

np.max()

np.std():标准差

np.var():方差

np.cov():相关系数矩阵

np.clip(min,max):对数组进行限制,小于min的全变成min

np.round(array,decimals=):将数组元素四舍五入,decimals保留几位小数

运算

np.multiply(x,y):矩阵对应的位置相乘

np.dot(x,y):矩阵乘法

np.logical_and():逻辑与

np.logical_not()

随机模块
np.random.rand(low,high,size,dtype)  ##生成的随机数
np.random.randn(low,high,size,dtype)  ##生成的随机数,随机数服从标准正太分布
np.random.randint(low,high,size,dtype)  ##生成随机整数
np.random.random_sample(size):##0-1之间随机取样
np.random.shuffle(array1):##洗牌
切片是引用类型

切片在内存中使用的是引用机制

引用机制意味着,Python并没有为b分配新的空间来存储它的值,而实让b指向了a所分配的内存空间,因此,改变b会改变a的值。

a=np.array([0,1,2,3,4])
b=a[2:4]
b
#array([2, 3])
b[0]=10
a
#array([ 0,  1, 10,  3,  4])

但是列表不是引用

花式索引

切片只能支撑连续或者等间隔的切片操作,要想实现任意位置的操作,需要使用花式索引

一维花式索引

花式索引需要指定索引位置

a=np.arange(0,100,10)
a
#array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
index=[1,2,-1,-2]#花式索引需要指定索引位置
a[index]
#array([10, 20, 90, 80])

还可以使用布尔数组来花式索引

a=np.arange(0,100,10)
a
#array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
mask=np.array([0,2,2,0,0,1,0,0,1,0],dtype=bool)
mask
a[mask]
#array([10, 20, 50, 80])

注意mask必须是布尔数组,长度必须和数组长度相等

二维花式索引
a=np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])
a
#array([[ 0,  1,  2,  3,  4,  5],
#       [10, 11, 12, 13, 14, 15],
#       [20, 21, 22, 23, 24, 25],
#       [30, 31, 32, 33, 34, 35],
#       [40, 41, 42, 43, 44, 45],
#       [50, 51, 52, 53, 54, 55]])

a[(0,1,2,3,4),(1,2,3,4,5)]   ##两个括号相对位置的数分别为行标和列标
#array([ 1, 12, 23, 34, 45])

#返回最后三行的1,3,5列
a[-3:,0:6:2]  a[-3:,[0,2,4]]
array([[30, 32, 34],
       [40, 42, 44],
       [50, 52, 54]])

mask=np.array([1,0,1,0,1,0],dtype=bool)
a[-3:,mask]
array([[30, 32, 34],
       [40, 42, 44],
       [50, 52, 54]])
where语句

where函数会返回所有非零元素的索引

a=np.array([1,2,3,4,5,6,7,8,9])
np.where(a>5)
#(array([5, 6, 7, 8], dtype=int64),)
np.where(a>5,1,0) #大于5用1,否则0
#array([0, 0, 0, 0, 0, 1, 1, 1, 1])

where返回的是索引,可以和数组一起用

a[np.where(a>5)]
#array([6, 7, 8, 9])
数组形状

通过np.shape(array)或者array.shape()去查看数组的形状

1.修改数组形状

array2.shape = (2, 3)

array2 = array2.reshape(2,3)

2.新增一行或者一列

新增一行,array = array[np.newaxis, :]

新增一列,array = array[:, np.newaxis]

3.转置矩阵

array1.transpose()

array1.T

4.数组的连接

竖着连接
np.concatenate((array1, array3), axis=0)
np.vstack((a,b))
横着连接
np.concatenate((array1, array3), axis=1)
np.hstack((a,b))
把多维数组变成一维数组
np.flatten()或者np.ravel()

读写文件

1.读文件

np.loadtxt(‘file’,delimiter = ‘分隔符’,skiprows = n,usecols = ):通过这个方法直接读取文件内容

注意默认分隔符是空格,skiprows的参数n代表是跳过第几行,usecols表示使用哪几列

2.写文件

np.savetxt(‘file’,写的内容,fmt='%d %.2f ',delimiter=‘分隔符’)

3.以.npy的格式写文件

np.save(‘.npy’)

读取.npy的文件用np.load

多个矩阵以.npy格式保存 使用np.npz(‘.npz’,a=矩阵1,b=矩阵2)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026910.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号