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) |
| |
| |
- 自定义数据类型:采用元组的方式定义样本包含的各个数据类型,同时在创建数组时,采用元组对该样本的数据进行创建。采用自定义数据类型可以更好的对表格数据进行可视化,让程序易读,同时保证各个数据类型的正确,方便计算。示例如下:
| 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) |
- np.zeros_like与np.ones_like为创建与某矩阵大小相同的全0或1的矩阵,使用方法如下
| B = np.zeros_like(A,dtype = float) |
- 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,:] |
| 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 |
| x[mask] = 0 |
| np.array([1,2]) |
| np.random.rand(2) |
| np.array([[1],[2]]) |
| np.array([[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) |
| mod_arr1_arr2 = np.mod(arr1,arr2) |
| |
| 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) |
| arr1_max_col = np.max(arr1,axis = 1) |
| arr1_std = np.std(arr1,axis=0) |
| arr1_mean = np.mean(arr1,axis=0) |
| arr1_average = np.average(arr1,weights=arr2) |
| 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 |
| |
| it.iternext() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统