> 技术文档 > Python 进阶知识之numpy库(一)

Python 进阶知识之numpy库(一)

目录

一、NumPy 库介绍

1、历史背景

2、核心功能与用途

3、重要意义

二、创建array

array(数组)——>模拟了矩阵

数组的基本属性

三、数组的升维

四、数组的降维


一、NumPy 库介绍

NumPy(Numerical Python 的缩写)是 Python 编程语言中一个开源的数值计算扩展库,它为 Python 提供了高性能的多维数组对象以及一系列用于处理这些数组的数学函数,是科学计算、数据分析等地方的基础工具之一。

1、历史背景
  • 起源与发展:NumPy 的前身是 1995 年由 Jim Hugunin 开发的 Numeric 库,当时它的出现主要是为了解决 Python 在数值计算方面的效率问题。2005 年,Travis Oliphant 在 Numeric 和另一个同类库 Numarray 的基础上,整合两者的优势,开发出了 NumPy,使其在功能和性能上得到了极大提升,并逐渐成为 Python 数值计算的标准库。
  • 持续迭代:自诞生以来,NumPy 不断更新迭代,吸引了众多开发者参与贡献,如今已成为 Python 生态中不可或缺的重要组成部分,其稳定的版本更新也保证了在各类场景下的可靠性。
2、核心功能与用途
  1. 提供高效的多维数组对象(ndarray)

    • 这是 NumPy 最核心的数据结构,它可以存储同类型的元素,相比 Python 内置的列表,ndarray 在内存占用、访问速度和运算效率上都有显著优势,尤其适合处理大规模数据。
    • 支持对数组进行维度变换、切片、索引等操作,方便数据的提取和重组。
  2. 丰富的数学运算函数

    • 包含大量用于数组运算的数学函数,如三角函数、指数函数、对数函数、线性代数运算(矩阵乘法、求逆、特征值等)、傅里叶变换等,这些函数都是基于 C 语言实现的,运算速度极快。
    • 支持向量化运算,即可以直接对整个数组进行操作,无需编写循环,简化了代码的同时也提高了执行效率。
  3. 作为其他库的基础

    • 许多 Python 科学计算领域的知名库,如 Pandas(数据分析)、Matplotlib(数据可视化)、Scikit-learn(机器学习)、TensorFlow(深度学习)等,都依赖于 NumPy 的数组对象和底层计算能力,NumPy 为它们提供了数据交互和运算的基础。
  4. 数据处理与分析

    • 在数据预处理阶段,可用于数据的清洗、转换、标准化等操作;在统计分析中,能快速计算数组的均值、方差、标准差等统计量。
  5. 科学与工程计算

    • 广泛应用于物理、化学、工程等地方的数值模拟、数值求解等问题,例如求解微分方程、进行信号处理等。
3、重要意义

NumPy 的出现极大地弥补了 Python 在数值计算方面的短板,使得 Python 从一门主要用于脚本编程和快速开发的语言,逐渐成为科学计算、数据分析和人工智能等地方的主流语言之一。它不仅提高了数值计算的效率,还通过简洁易用的接口降低了科学计算的门槛,促进了相关领域的发展和应用。

二、创建array

array(数组)——>模拟了矩阵

一般用np代替numpy来便捷使用

使用方法为

np.array()#括号里面加上列表或者需要组合的数组
import numpy as np#导入numpy as np#一维数组list1 = [1,2,3,4,5] #python自带的列表数据类型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])#更高维的y = np.array([z,z,z])

 运行结果

[1, 2, 3, 4, 5][1 2 3 4 5][[1 2 3 4 5] [1 2 3 4 5] [1 2 3 4 5]][[[1 2 3 4 5] [1 2 3 4 5] [1 2 3 4 5]] [[1 2 3 4 5] [1 2 3 4 5] [1 2 3 4 5]] [[1 2 3 4 5] [1 2 3 4 5] [1 2 3 4 5]]]

数组的基本属性

在numpy库中,数据有多个维度

代码接上面的内容

a = v.shape #查询数组的形状b = v.ndim #查询数组的维度c = v.size #查询数组中数据个数print(type(v))d = v.dtype #查询数组中的元素类型,int8, int16, int32, int64: 表示不同长度的有符号整数。# uint8, uint16, uint32, uint64: 表示不同长度的无符号整数。# float16, float32, float64 (float 是 float64 的简写): 表示不同精度的浮点数。# complex64, complex128 (complex 是 complex128 的简写): 表示复数,其中64和128表示复数的实部和虚部的位数。# bool: 布尔类型,可以存储True或False。# str_: 表示定长字符串,可以通过添加数字来指定字符串的长度,如 \'S10\' 表示长度为10的字符串。# object: 表示Python对象类型,可以用来存储任意Python对象。#二维数组a = m.shape#是描绘m矩阵的形状b = m.ndim#表示数据的维度 2c = m.sizeprint(type(m))d = m.dtype#三维数组z.shapez.ndimz.sizetype(z)z.dtype

调试结果:

三、数组的升维

数组的维度可以互相转化,

import numpy as nplist1 = [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]#v = np.array(list1)print(v)#一维变二维[-1表示自己计算]【返回一个改变后的矩阵】# a.reshape(newshape, order=\'C\')# a:要重新形状的数组。# newshape:一个整数或者元组,用于定义新的形状。# order:可选参数,指定元素在数组中的读取顺序。\'C\'意味着按行,\'F\'意味着按列,\'A\'意味着原顺序,\'K\'意味着元素在内存中的出现顺序。r1 = v.reshape(4,4)120r1 = v.reshape(-1,4)print(r1)r1.ndim#一维变三维r2 = v.reshape(1,-1,2)print(r2)#二维变三维r3 = r1.reshape(2,2,4)print(r3)#resize()【不返回计算结果】【直接修改原始数组】#r4 = v.resize(2,4)#print(r4)r4 = v.resize(4,4)#直接会修改原始数据到相应的维度print(v)

四、数组的降维

import numpy as nplist1=[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]v=np.array(list1)v=v.reshape(2,2,2,2)print(v)v.ndim#将三维转化为二维r1=v.reshape(1,8,2)print(r1)r2 =v.ravel()print(r2)#直接转化为一维,不管原来是几维,先行后列罗列出来r3 = v.flatten()#重要,不会修改原数组print(r3)v.shape = (2,4)print(v)#shape可以直接实现转化维度