(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
云原生网关 MSE Higress,422元/月
简介: Numpy是什么?numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。Numpy能做什么?numpy的部分功能如下:ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组用于对整组数据进行快速运算的标准数学函数(无需编写循环)。用于读写磁盘数据的工具以及用于操作内存映射文件的工具。线性代数、随机数生成以及傅里叶变换功能。用于集成由C、C++

Numpy是什么?

numpy是Python中科学计算的基础包。

它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

Numpy能做什么?

numpy的部分功能如下:

  1. ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
  2. 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  3. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  4. 线性代数、随机数生成以及傅里叶变换功能。
  5. 用于集成由C、C++、Fortran等语言编写的代码的API。

Ndarray 的核心特性

  • Numpy中的数组

多维性

  • 支持0维(标量)、1维(向量)、2维(矩阵)及更高维数组

同质性

  • 所有元素类型必须一致(通过dtype指定)

高效性

  • 基于练习内存块存储,支持向量化运算

多维性

  • 创建0维的ndarray数组
import numpy as np
arr = np.array(5)
# 获取arr的维度;number of dimensions
print(arr.ndim) # 0
  • 创建1维的ndarray数组
import numpy as np
arr = np.array([1,2,3])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 1
  • 创建二维数组
import numpy as np
arr = np.array([1,2,3],[4,5,6])
# 获取arr的维度;number of dimensions
print(arr.ndim) # 2

同质性

  • 不同的数据类型会被强制转换成相同的数据类型
arr = np.array([1,'hello'])
print(arr) # ['1','hello']

原本在数组中1是数值number,在创建后,会被自动转换为字符串

arr = np.array([1,2.22])
print(arr) # [1. 2.22]

浮点数也是一样,number会被转为float浮点数

属性

属性 说明 示例
shape 数组的形状:行数和列数 arr.shape
ndim 维度数量:数组是几维 arr.ndim
size 总元素个数:数组中所有元素的总数 arr.size
dtype 元素类型:数组中元素的类型 arr.dtype
---------- --------------------------- -----------
T 转置:行列格式互换 arr.T
itemsize 单个元素占用的内存字节数 arr.itemsize
nbytes 数组总内存占用量:size*itemsize arr.nbytes
flags 内存存储方式:是否连续存储(高级优化) arr.flags

shape形状

  • 0维
arr = np.array(1)
print(arr) # 1
print(arr.shape) # ()
  • 一维
arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.shape) # (3,)
  • 二维
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.shape) # (3,3)

size个数

  • 0维
arr = np.array(1)
print(arr) # 1
print(arr.size) # 1
  • 一维
arr = np.array([1,2,3])
print(arr) # [1 2 3]
print(arr.size) # 3
  • 二维
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.size) # 6

dtype数据类型

  • 0维
arr = np.array(1)
print(arr) # 1
print(arr.dtype) # int64
  • 一维
arr = np.array([1,2.5,3])
print(arr) # [1. 2.5 3.]
print(arr.dtype) # float64
  • 二维
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.dtype) # int64

T数组转置

  • 转置效果在一维和零维数组上体现不出效果,只有在二维或更高维的数组上在能体现
arr = np.array([1,2,3],[4,5,6])
print(arr) # [[1 2 3] [4 5 6]]
print(arr.T) # [[1 4] [2 5] [3 6]]

ndarray 创建

上述都属于基本构造

ndarray还有很多构造方式

构造方式 说明
基础构造 适用于手动构建小规模数组或复制已有数据
预定义形状填充 用于快速初始化固定形状的数组(如全0占位、全1初始化)
基于数值范围生成 生成数值序列,常用于模拟时间序列、坐标网格等
特殊矩阵生成 数学运算专用(如线性代数中的单位矩阵)
随机数组生成 模拟实验数据、初始化神经网络权重等场景
高级构造方法 处理非结构化数据(如文件、字符串)或通过函数生成复杂数组
  • 函数生成列举
用途 方法
基础构造 np.array() np.copy()
预定义形状填充 np.zeros() np.ones() np.empty() np.full()
基于数值范围生成 np.arange() np.linspace() np.logspace()
特殊矩阵生成 np.eye() np.diag()
随机数组生成 np.random.rand() np.random.randn() np.random.randint()
高级构造方法 np.array() np.loadtxt() np.fromfunction()

基本构造

np.array()基础创建

list1 = [1,2,3]
arr = np.array(list1)
print(arr.ndim) # 1
print(arr)# [1  3]

.array()还有其他参数,例如指定数组类型,指定数组维度,指定复制对象

np.copy()拷贝

将其他数组拷贝到新数组

# copy
arr1 = np.copy(arr)
print(arr1) #[1. 2. 3.]
  • 元素跟原始的数组相同,但是不是一个数组了

预定义形状

np.zeros()预定义形状

arr = np.zeros((2,3),dtype=int)
print(arr)
#[[0 0 0]
# [0 0 0]]
  • .zeros()默认创建的是float类型

.ones()全1和.empty()随机

# 全1
arr = np.ones((2,3),dtype=int)
print(arr)
# [[1 1 1] [1 1 1]]

# 空,默认是随机数
arr = np.empty((2,3))
print(arr)
# [[5.e-324 5.e-324 5.e-324]
# [5.e-324 5.e-324 5.e-324]]

.full()填充

  • .full()方法可以指定填充的数值
# full 填充
arr = np.full((2,3),666)
print(arr)
#[[666 666 666]
# [666 666 666]]

数值范围生成

.arange(start,end,step)

arr = np.arange(1,10,2) # start,end,step(步长)
print(arr)
# [1 3 5 7 9]
  • 根据步长,生成从start数开始到end数的数组
  • 数组中不包含end本身,如果要包含建议:end+1

.linspace(start,end,slice)

arr2 = np.linspace(1,10,3) # start,end,slice(间隔)
print(arr2) #[ 1.   5.5 10. ]
  • 生成从start到end数的数组,并再这个区间中根据间隔数获得相应的值(等分的)

使用arange()也可以达到相应的效果,但是对数组内个数要求严苛一些

.logspace(start,end,num,base)

对数间隔

  • start 开始数值
  • end 结束数值
  • num 需要取多少个数
  • base 以多少为底
# 对数间隔数列
arr = np.logspace(0,4,5,base=2)
print(arr) # [ 1.  2.  4.  8. 16.]

其实这个不难理解,从linspace角度来看

logspace在执行前会先执行linsapce

arr2 = np.linspace(0,4,5)
print(arr2) # [0. 1. 2. 3. 4.]
  • logspace 会拿这个 linspace 生成的数组去取自身 base 数值的次方

矩阵

名称 维度 示例 说明
标量 零维 5,3 单个数字,无行列
向量 一维 [1,2,3] 只有行或列
举证 二维 [[1,2,3] [4,5,6]] 严格的行列结构(二维表)
张量 >=三维 [[1,[5,6][[7,[8,9]],4]] 高阶数组(如RGB图像)

矩阵是一个由行和列排列成的矩阵数组
$$ A = \begin{bmatrix} 0&1&2\\ 3&4&5\\ 6&7&8\\ \end{bmatrix} $$
形状:这个矩阵有3行3列,记作 2*3矩阵

元素:矩阵中的每个数字称为元素


矩阵类型 定义 例子
零矩阵 所有元素为0 $$\begin{bmatrix} 0&0\\0&0 \end{bmatrix}$$
单位矩阵 对角线上为1,其余为0 $$\begin{bmatrix} 1&0\\0&1 \end{bmatrix}$$
对角矩阵 只有对角线有非零值 $$\begin{bmatrix} 2&0\\0&3 \end{bmatrix}$$
对称矩阵 $$A=A^T$$ $$\begin{bmatrix} 1&2\\2&3 \end{bmatrix}$$

.eye(行,列)单位矩阵

  • 主对角线上的数字为1,其他数字为0
arr = np.eye(3)
print(arr)
#[[1 0 0]
# [0 1 0]
# [0 0 1]]


arr = np.eye(3,5,dtype=int)
print(arr)
#[[1 0 0 0 0]
# [0 1 0 0 0]
# [0 0 1 0 0]]

.diag([])对角矩阵

  • 主对角线上非零的0,其他的数字为0
arr = np.diag([1,2,3])
print(arr)
#[[1 0 0]
# [0 2 0]
# [0 0 3]]

方法内传递的是你要在对角线上出现的数字

随机数组的生成

均匀分布

生成0到1之间的随机浮点数(均匀分布)

arr = np.random.rand(2,3)
print(arr)
#[[0.70168642 0.71753434 0.96317388]
# [0.95506805 0.23474415 0.40630574]]

生成指定范围区间的随机浮点数(均匀分布)

arr = np.random.uniform(3,6,(2,3))
print(arr)
#[[5.03622931 4.34216028 5.06781859]
# [4.87780163 5.27826677 4.91474848]]
  • .uniform(start,end(row,col))

均匀随机生成一个从start到end范围之间的row行col列的数组


生成指定范围区间的随机整数(均匀分布)

arr = np.random.randint(3,30,(2,3))
print(arr)
#[[16 29 26]
# [29 22 22]]

设置随机种子

np.random.seed(20)
arr = np.random.randint(1,10,(2,5))
print(arr)
#[[4 5 7 8 3]
# [1 7 9 6 4]]
  • 种子的作用相当于一个独立的key值,根据key值生成了对应的数组

正态分布

  • 正态分布:两边小,中间大
arr = np.random.randn(2,3) # (-3到3之间)
print(arr)
#[[ 1.47105787 -0.50274641 -0.65000031]
# [ 1.6759262  -0.26047681  0.84227465]]

正态分布存在一个峰值,从峰值处,向两端减小和扩大数值,

正态分布.png

逐渐向两段扩大和缩小值并不成立倒数关系

ndarray的数据类型

常用的数据有

  • 布尔类型 bool
  • 整数类型 int uint(无符号整型)
  • 浮点数 float
  • 复数 complex
arr = np.array([2,0,4],dtype='bool')
print(arr) # [ True False  True]

注意,在使用各类数据类型时,还需要考虑到对应的类型能否符合存储要求

arr = np.arange(0,5000,dtype=np.int8)
print(arr) # [   0    1    2 ... -123 -122 -121]

这里明显已经爆内存了,所以随后数值为负数

不使用int8,改为int16。扩大存储,即可解决问题

arr = np.arange(0,5000,dtype=np.int16)
print(arr)# [   0    1    2 ... 4997 4998 4999]

或者使用无符号整型

arr = np.arange(0,5000,dtype=np.uint)
print(arr)# [   0    1    2 ... 4997 4998 4999]

数据类型表格

数据类型 说明
bool 布尔类型
int8、uint8
int16、uint16
int32、uint32
int64、uint64
有符号、无符号的8位整型
有符号、无符号的16位整型
有符号、无符号的32位整型
有符号、无符号的64位整型
float16
float32
float64
半精度浮点型
单精度浮点型
双精度浮点型
complex64
complex128
用两个32位浮点数表示的复数
用两个64位浮点数表示的复数

💕👉博客专栏

目录
相关文章
|
1月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
177 0
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
288 0
|
1月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
115 0
|
5月前
|
测试技术 数据处理 Python
Python列表推导式:简洁高效的数据处理利器
Python列表推导式:简洁高效的数据处理利器
300 80
|
3月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
293 0
|
10月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
325 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
10月前
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
223 1
|
10月前
|
人工智能 分布式计算 数据处理
有奖评测,基于分布式 Python 计算服务 MaxFrame 进行数据处理
阿里云MaxCompute MaxFrame推出分布式Python计算服务MaxFrame评测活动,助力开发者高效完成大规模数据处理、可视化探索及ML/AI开发。活动时间为2024年12月17日至2025年1月31日,参与者需体验MaxFrame并发布评测文章,有机会赢取精美礼品。
|
8月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。

推荐镜像

更多