news 2026/2/14 1:23:41

第三方库Numpy

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第三方库Numpy

认识Numpy

NumPy 是 Python 科学计算的基础库,专为高效处理多维数值数据设计,是 Pandas、Matplotlib 等库的底层依赖。它将 Python 列表升级为同质化、连续内存的多维数组(ndarray),通过向量化运算和底层优化,解决纯 Python 循环的低效问题,大幅提升数学运算、线性代数等操作速度。

因为numpy的底层用C语言,所以处理数据(如数字,矩阵)处理的速度比较快

importnumpyasnpprint(np.sin(1))#这里参数为弧度,角度(D)和弧度(R)之间的关系:D = (180/π) × Rprint(np.abs(-1))#计算绝对值

安装和配置环境

通过 pip 安装:pip install numpy

创建数组

创建一维数组

importnumpyasnp list1=[1,2,3,4,5]#python自带的列表数据类型print(list1)v=np.array(list1)#将参数转换位矩阵,创建一个一维数组print(v)

array可以进行强制类型转化
创建二维数组(多个一维数组构成)

importnumpyasnp list1=[1,2,3,4,5]print(list1)v=np.array(list1)print(v)m=np.array([list1,list1,list1])#创建一个二维数组print(m)

创建三维数组(多个二维数组构成)

importnumpyasnp list1=[1,2,3,4,5]print(list1)v=np.array(list1)print(v)m=np.array([list1,list1,list1])print(m)z=np.array([[list1,list1,list1],[list1,list1,list1],[list1,list1,list1]])#创建一个三维数组print(z)

如果是更高维的可以写成:z = np.array([m,m,m])

数组的基本属性

一维数组

a=v.shape#查询数组的形状b=v.ndim#查询数组的维度c=v.size#查询数组中数据个数print(type(v))d=v.dtype#查询数组中的元素类型,int8, int16, int32, int64: 表示不同长度的有符号整数。

float16, float32, float64 (float 是 float64 的简写): 表示不同精度的浮点数。
二维数组

a=m.shape#是描绘m矩阵的形状b=m.ndim#表示数据的维度 2c=m.sizeprint(type(m))d=m.dtype

数组的升维

NumPy 的 reshape方法通过 a.reshape(newshape, order=‘C’)实现数组升维,其中 a是待重塑的数组,newshape为定义新形状的整数或元组(如 (4,4)或 (1,-1,2)),-1表示自动计算该维度大小,order参数(默认 'C’按行优先)控制元素排列顺序,能在不改变数据内容的前提下,将低维数组(如一维)转换为高维数组(如二维、三维),满足复杂数据处理需求。
先创建一个一维数组

importnumpyasnp list1=[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]#v=np.array(list1)print(v)

在NumPy中,升维是指通过reshape方法将低维数组转换为高维数组,其代码形式为a.reshape(newshape, order=‘C’),其中a代表要进行形状重塑的原始数组,newshape是一个整数或者元组,用于定义新数组的形状,比如(4, 4)表示4行4列,(4, -1)中-1表示该维度大小由NumPy根据总元素数和其他已知维度自动确定,order是可选参数,用于指定元素在数组中的读取顺序,默认为’C’(按行优先,即先行后列),也可以是’F’(按列优先)、‘A’(按原顺序)、‘K’(按元素在内存中的出现顺序) 。

一维变二维

r1=v.reshape(4,4)r1=v.reshape(4,-1)#-1表示任意。print(r1)

r1 = v.reshape(4,4):表示将数组改为4行4列,即4×4的形式

r1 = v.reshape(4,-1):表示将数组改为4行任意几列都可以的形式

一维变三维

r2 = v.reshape(1,-1,2):表示将数组改成1个,任意行,2列的形式

r2=v.reshape(1,-1,2)print(r2)

注意:括号里的1表示新形状的第一维度大小为 1,即结果数组的第一维度长度为 1,

-1表示任意行,NumPy 会根据总元素数和其他已知维度自动确定该维度的大小。 2表示2列

通俗来说就是新的数组里面有1个,任意行2列的数组

二维变三维

r3=r1.reshape(2,2,4)print(r3)

r3 = r1.reshape(2,2,4):表示将数组改成2个,2行,4列的形式

resize()方法

r4=v.resize(2,4)print(r4)print(v)

resize()方法
在NumPy中,resize()方法用于改变数组的形状(即维度),与 reshape()不同,resize()会直接修改原数组(如果原数组可被修改)或返回一个新数组,并且它不保证原数组的数据不被改动。

数组的降维

先创建一个一维数组

importnumpyasnp list1=[1,2,3,4,5,6,7,8]v=np.array(list1)v=v.reshape(2,2,2)print(v)v.ndim

三维降到二维

r1=v.reshape(1,8)print(r1)r1.ndim

将高维数据降到一维

r2=v.ravel()print(r2)r3=v.flatten()#非常重要print(r3)

在NumPy中,数组降维可以通过多种方法实现,其中flatten方法会将多维数组转换为一维数组并返回一个原数组的副本,这意味着对返回的一维数组所做的任何修改都不会影响到原始的多维数组;而ravel方法(如果可能)则返回一个原始数组的视图,对这个视图所做的修改可能会影响原始的多维数组,因为ravel仅改变了数组的形状和步长,而没有复制数据。此外,还可以通过直接修改数组的shape属性,例如使用v.shape = (2,4),来实现数组的降维,这种方法同样会直接作用于原数组。

v.shape=(2,4)#通过直接对array数据的属性进行修改。print(v)

创建特殊数组

创建全为0的数组

a=np.zeros(5)b=np.zeros((2,2))#(2,2)np.zeros((2,2))#zeros只能接受1个参数,c=np.zeros((3,2,2))print(a,'\n',b,'\n',c)

创建全为1的数组

d=np.ones(5)e=np.ones((2,2))f=np.ones((2,2,2))

创建全为2的数组

#创建全为2的数组 矩阵中全部填充指定的数据g=np.full((2,2,2),5)

numpy中常用的两个函数

importnumpyasnp#1.arange(start, end, step) -> range(start, end, step)# [左闭右开的区间]一次性产生规律的数据。r1=np.arange(0,9,3)print(r1)#2.linspace(start, end, nums)# [左右都是闭区间]r2=np.linspace(0,1,21)print(r2)

一维数组元素的选取与修改

importnumpyasnp array1=np.arange(1,9,1)print(array1)#选取某个元素a=array1[1]#选取某些元素b=array1[[1,3,5]]#切片(左闭右开)c=array1[0:6]print(a,b,c)#修改某个元素print(array1)array1[0]=10#批量修改某些元素array1[[1,3,5]]=20print(array1)array1[0:6]=100print(array1)

二维数组元素的选取与修改

importnumpyasnp array1=np.arange(24).reshape(4,6)#array数据 .reshape()print(array1)#选取某个元素a=array1[1,4]#第2行第5列#选取某行元素b=array1[3,:]#逗号是用分隔行和列#选取某些行c=array1[0:2,:]d=array1[[0,2],:]#如果不是获取连续的行,[]#选取某列e=array1[:,3]#选取某些列f=array1[:,0:3]g=array1[:,[0,3]]print(a)print(b)print(c)print(d)print(e)print(f)print(g)#修改元素#修改某个元素array1[1,4]=100print(array1)#修改某行元素array1[3,:]=100print(array1)array1[[0,2],:]=50print(array1)

冒号表示选取所有

三维数组元素的选取与修改

importnumpyasnp array1=np.arange(48).reshape(2,4,6)print(array1)#选取某个元素#首先确定选取哪一个二维数组a=array1[1,0,0]#选取某行元素b=array1[0,1,:]#选取某些行元素c=array1[0,1:3,:]d=array1[0,[1,3],:]#选取某列e=array1[1,:,1]#选取某些列f=array1[1,:,1:4]g=array1[1,:,[1,4]]#修改array1[1,0,0]=100print(array1)v=np.array([array1,array1,array1,array1])a=v[2,1,2:,1:3]print(a)

数组的组合

importnumpyasnp#生成基数组array1=np.arange(9).reshape(3,3)array2=2*array1print(array1)print(array2)#水平组合a3=np.hstack((array1,array2))a4=np.hstack((array2,array1))a5=np.hstack((array1,array2,array1))a6=np.concatenate((array1,array2),axis=1)#连接#axis表示连接的方向#垂直组合a7=np.vstack((array2,array1))a8=np.concatenate((array1,array2),axis=0)print(1)

numpy内数组元素的切割

importnumpyasnp array1=np.arange(16).reshape(4,4)print(array1)#水平切割a=np.hsplit(array1,2)#其中第2个参数 2表示将矩阵array1进行2等份切分b=np.split(array1,2,axis=1)#垂直切割c=np.vsplit(array1,2)#d=np.split(array1,2,axis=0)#强制切割array_split#水平切割e=np.array_split(array1,3,axis=1)#垂直切割f=np.array_split(array1,3,axis=0)array1=np.arange(25).reshape(5,5)print(array1)g=np.array_split(array1,3,axis=1)h=np.array_split(array1,3,axis=0)

数组的算数运算

importnumpyasnp array1=np.arange(1,5,1).reshape(2,2)array2=2*array1print(array1)print(array2)#数组的加法【对应位置的元素求和】print(array1+array2)#前提 矩阵shape必须一致#数组的减法[对应位置元素相减]print(array1-array2)#数组的乘法【对应位置相乘】print(array1*array2)#数组的除法[对应位置相除]print(array1/array2)#数组的取余(%)print(array2%array1)#数组的取整print(array1//array2)

数组的深拷贝和浅拷贝

importnumpyasnp array1=np.array([1,2,3])#浅拷贝array2=array1#更改array2的元素的值array2[0]=100print(array2)print("#####################")print(array1)#深拷贝array3=array1.copy()array3[0]=10print(array3)print("##################")print(array1)

numpy内的随机模块儿(一)

importmatplotlib.pyplotasplt""" randint(start,end): 产生一个随机整数 (0,10) ->左闭右开的区间 """#随机种子np.random.seed(1000)#random 矩阵类型随机,1、只能来管理numpy中的随机值2、随机种子只能对下面的随机函数产生1次种子效果r1=np.random.randint(0,10)#print(r1)#a=[]foriinrange(100):a0=np.random.randint(0,10)a.append(a0)print(a)plt.hist(a,color='r')#绘制直方图,plt.show()

numpy内的随机模块儿(二)

importnumpyasnp""" rand() ->(0,1)之间的随机浮点数 """#np.random.seed(100)r1=np.random.rand()print(r1)""" normal() ->生成一些符合正态分布的数据 N~(0,1) numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数说明: loc:正态分布的均值(期望值),决定了分布的中心位置,默认值为 0.0 scale:正态分布的标准差,决定了分布的离散程度,默认值为 1.0 size:输出数组的形状,可以是整数(表示一维数组长度)或元组(表示多维数组形状),默认值为 None(返回单个值) """r2=np.random.normal()print(r2)##################################生成随机数矩阵r3=np.random.randint(0,10,size=(5,5))print(r3)r4=np.random.rand(5,5)print(r4)r5=np.random.normal(5,10,size=(5,5))print(r5)

numpy内一些函数的使用

importnumpyasnp array1=np.random.normal(size=(3,3))print(array1)#一些函数#求方差print(array1.var())#求标准差a=array1.std()#求均值b=array1.mean()#求和c=array1.sum()#求中位数#array1.median()d=np.median(array1)#求和运算#对矩阵的行求和e=array1.sum(axis=1)#对矩阵的列进行求和f=array1.sum(axis=0)

矩阵的运算\

importnumpyasnp#生成两个基数组a=np.arange(4).reshape(2,2)b=a.copy()#矩阵的运算#加减乘除(求逆)#加减 ->对应元素加减#矩阵的乘法【点乘】#a * ba1=a.dot(b)a2=np.dot(a,b)#矩阵求逆""" inv(): 并不是所有的矩阵都有逆; 即使你没有逆,给你一个逆【伪逆】 """a3=np.linalg.inv(a)a4=a.dot([[-1.5,0.5],[1.,0.]])print(a4)

读取文件

# numpy.loadtxt():从文本文件中加载数据。这个函数假定文件中的每一行都有相同数量的值,并将这些值分隔开。# 你可以使用 delimiter 参数指定分隔符,如逗号、制表符等。例如:importnumpyasnp data=np.loadtxt('datingTestSet2.txt',delimiter='\t')print(data)#将数组保存到txt文件中importnumpyasnp array=np.array([[1,2,3],[4,5,6],[7,8,9]])# 创建一个 NumPy 数组np.savetxt('array.txt',array)# 使用 savetxt() 将数组保存到文本文件中
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!