随笔 - 14, 文章 - 0, 评论 - 0, 阅读 - 209

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

10.Numpy库学习

Posted on   小熊_努力学习版  阅读(13)  评论(0编辑  收藏  举报

numpy学习网址 https://www.runoob.com/numpy/numpy-tutorial.html

1. numpy对象
numpy代码是基于静态语言C++编写,可以实现与C语言代码整合,主要是用于数组计算,运算速度非常快。numpy最强大的功能是能够创建n维数组对象ndarray。

np.array(object,dtype ='' )

其中object为所需创建的数组采用中括号括起来,dtype为元素的数据类型,dtype一般需要按照需求进行自定义创建修改。
2. numpy的数据类型
numpy在创建矩阵时,若数据全为整数,那么ndarray就全以int64的形式储存;如果里面有浮点数,那么则全以float64储存。同时可以自定义数据类型来储存不同数据类型在一个矩阵中。

  • 主要使用的数据类型有np.bool_,np.int64,np.float64,以及复数np.complex.128。
dt = np.dtype(np.bool_)
bool_arr = np.array([[1,1,1],[0,0,2]],dtype = dt)
# 运行结果为[[ True True True]
#[False False True]]
  • 自定义数据类型:采用元组的方式定义样本包含的各个数据类型,同时在创建数组时,采用元组对该样本的数据进行创建。采用自定义数据类型可以更好的对表格数据进行可视化,让程序易读,同时保证各个数据类型的正确,方便计算。示例如下:
dt2 = np.dtype([('age', np.int64), ('height', np.float64), ('name', 'U20')]) # 定义了一个人的样本数据类型,包含年龄身高和名字
e = np.array([('10', '175', '小宇'), ('18', '185', '小熊')], dtype = dt2)
print(f'自定义数据类型输出结构{e}')

3. array的属性
numpy中提供了对矩阵中一些数值的计算方式主要有下面几个函数(秩、形状、个数、数据类型):
(ndarray为用户所创建的矩阵)

  • ndarray.ndim: 数组的秩(rank),即数组的维度数量或轴的数量。
  • ndarray.shape: 数组的维度,表示数组在每个轴上的大小。对于二维数组(矩阵),表示其行数和列数。
  • ndarray.size: 数组中元素的总个数,等于 ndarray.shape 中各个轴上大小的乘积。
  • ndarray.dtype: 数组中元素的数据类型。

4. 创建和修改数组

  • 创建数组除了直接使用np.array([],dtype=none)来自定义数组之外,还可以通过numpy中自带的一些内置函数进行创建所需形状大小的数组,包括np.zeros,np.ones,np.zeros_like,np.ones_like和np.arange。
  • np.zeros与np.ones为生成全0或全1的矩阵。两者用法相同如下
A = np.zeors([rows,cols],dtype=int) # or float,rows为创建矩阵的行数,cols为列数目
  • np.zeros_like与np.ones_like为创建与某矩阵大小相同的全0或1的矩阵,使用方法如下
B = np.zeros_like(A,dtype = float) # or int,A为目标矩阵。
  • arange与range的区别与使用:arange为numpy的库函数,需要导入numpy库才能使用,主要用于创建一个矩阵序列,既可以创建int也可以生成float数据,生成的序列全部储存在内存中;而range为python内置函数,主要用于迭代循环,只能生成int数据,且采用惰性求值,只有在用for或者next()访问该数据时,才会生成值(与生成器类似),能够节省内存。
C = np.arange(start,end,step)
D = range(start,end,step)
  • 矩阵切片:与matlab相同,采用':'表示步长,即从起始元素到终止元素(取不到)。
arr1 = np.array([[1,2,3],[2,3,4]],dtype = float)
arr1[1,:] #第二行的所有列
arr1[1:3,:] #从2到3行的所有列
arr1[1:,:] #第一行后所有行的所有列
arr1[:] 全部数值
  • 修改已有矩阵的数据类型:采用ndarray.astype(np.int64)或者直接覆盖,arr = np.array(arr,dtype=int64)
  • 生成随机数:np.random.rand()、np.random.randi()、
  • ** bool索引**: numpy数组可以通过相同形状的bool矩阵进行对应位置索引,索引的位置为bool值为True的位置,这样可以非常方便的按照某一条件修改数组中数值。
x = np.array([[1,1,2],[2,3,4])
mask = x>=1 # 生成bool掩码,数组x中值大于等于1的bool掩码。
x[mask] = 0 # 索引x中值大于1的位置,并修改值为0
  • 数组维度:
np.array([1,2]) # shape(2,)表示一维向量,元素个数有2两个,计算时按照一行两列的矩阵计算;(1,2)
np.random.rand(2) # 同样是一维向量,表示有2个元素,实际为1行2列。
np.array([[1],[2]]) # shape (2,1) 2行1列
np.array([[1,2]]) # shape (1,2)1行2列

5. 数学函数

  • 计算函数:幂np.power(ndarray,n);求余数np.mod(ndarray1,ndarray2)或者np.remainder(arr1,arr2),矩阵对应位置求余,对数函数np.log(),自然指数函数np.exp(),
arr1 = np.array([[1,2,3],[2,3,4]],dtype = float)
arr2 = np.array([[1,1,2,1,2,3]],dtype = float)
pow_arr1 = np.power(arr1,3) # 求arr1的三次方
mod_arr1_arr2 = np.mod(arr1,arr2) # 求arr1对arr2对应位置数字的余数
# python只提供了log(以e为底),log2以2为底,log10以10为底的三个对数函数。
np.log(arr1)
np.log2(arr1)
np.log10(arr1)
np.exp(arr1) #指数函数
  • 三角函数:np.sin()、np.cos()、np.tan()、np.arcsin()、np.arctan(),注意括号内为弧度制,需要将角度30°转换为弧度制,也就是np.sin(30/180*np.pi)

  • 统计函数
    最值函数:np.amin(ndarray,axis=[])、np.amax():最值在计算时若不指定axis则表示计算矩阵中全部值中的最大值,若指定axis=0则表示计算每列的最值(计算每列的最值也就是比较每一行的值),或者axis=1计算每行的最值(计算每行的最值也就是比较每列的值所以axis=1表示按列进行比较)。
    标准差与方差:np.std(ndarray,axis=[]),np.var(ndarray,axis=[])
    平均值:np.mean()
    加权平均值:np.average(arr1,weights = arr2),arr2为对应arr1的权重,两者形状相同,若arr2 = none则与mean相同

arr1_max = np.max(arr1) # 求矩阵中的最大值
arr1_max_row = np.max(arr1,axis = 0) # 计算每一列的最大值,axis=0表示行,表示比较某一列中每行的值大小并返回每列的最值。
arr1_max_col = np.max(arr1,axis = 1) # 计算每一行的最大值,axis=1表示列,表示比较某一行中每列的值大小并返回每行的最值。
arr1_std = np.std(arr1,axis=0)
arr1_mean = np.mean(arr1,axis=0) # 计算每列的平均值
arr1_average = np.average(arr1,weights=arr2) # 计算每列的加权平均值,weights为权重,即每列的权重为1和2,即第一列的权重为1,第二列的权重为2
print(f'arr1的最大值为{arr1_max}', '\n', f'按行计算的最值为{arr1_max_row},按列计算的最值为{arr1_max_col}','\n',f'arr1各列的标准差为{arr1_std}','\n',f'arr1各列的平均值为{arr1_mean}',f'arr1各列的加权平均值为{arr1_average}')

6.最值函数

  • max:python内置函数,用于比较单个数值大小或者寻找列表数组中的最大值。
  • np.max(arr,axis = None):numpy数据库函数,功能与max相同,但是在处理较大数组时,采用np.max运算速度可能会更快,只能计算某个数组中的最大值,默认none表示对整个数组进行计算;axis=0,按行进行比较,返回每列的最大值;axis=1:按列进行比较,返回每行的最大值。
  • np.maximum(arr1,arr2):numpy包的函数,该函数是用于比较两个数组或者数值并返回一个新的数组(采用array的广播方式进行对应位置比较并返回对应位置较大的值。)
  • np.argmax(arr1,axis = None):返回矩阵中最大值索引,这个索引值是将数据展平为一维得到的索引;axis=0,返回每列最大值的行索引值,(范围的数值为行索引,数值本身在返回的矩阵的列索引为在原矩阵位置的列索引);axis = 1,返回每行最大值的列索引,数值本身在返回的矩阵的列索引为在原矩阵位置的行索引.
    7. np.nditer——多维数组迭代器
    it = np.nditer(arr,flags=['multi_index']) : 从arr创建一个多维数组的迭代器it,it具有方法it.multi_index(范围多维数组的索引),it.iternext():迭代器输出下一个值,it.finished:返回的是_bool值,当迭代完成时返回True。
import numpy as np
arr = np.random.rand(3, 3, 3)
it = np.nditer(arr, flags=['multi_index'])
while not it.finished:
idx = it.multi_index
# 处理 arr[idx]
it.iternext()# 迭代下一个值
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示