Python科学计算库Numpy

简介: Python科学计算库Numpy

1 介绍

  • Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
  • Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
  • Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

1.1 ndarray

Numpy提供了一个N dimension array,即n维数组

1.2 numpy与list对比

  1. 存储风格:
    ndarray 内部存储类型相同,存储空间连续,但通用性不强
    list 内部存储类型可以不同,存储空间未必连续,通用性较强
  2. 并行化计算:ndarray支持向量化运算
  3. 底层语言:
    Numpy底层采用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。

属性方法

属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型
使用方法 数组名.函数名

2 基本操作

2.1 ndarray形状和类型

形状

import numpy as np
a = np.array([[1,2,3],[4,5,6]])   #(2,3)
b = np.array([1,2,3,4])        #(4,)
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])#(2,2,3)
print(a.shape)
print(b.shape)
print(c.shape)

元组:表示外到内的元素个数,维度就是括号层数。

运行结果

类型

创建数组时指定即可

# 创建数组的时候指定类型
np.array([1.1, 2.2, 3.3], dtype="float32")

2.2 生成数组

  • 生成0 1 数组
# 1 生成0和1的数组
  a=np.zeros(shape=(3, 4), dtype="float32")
  ##其中shape的参数为列表/元组均可,用于表示生成的数组维度

运行结果

  • 从现有数组生成
a1=np.array(a)  #深拷贝
  a2=np.copy(a)   #深拷贝
  a3=np.asarray(a)#浅拷贝
  a4=a      #浅拷贝
  • 生成固定范围的数组
a1=np.linspace(0, 10, 5)  # 生成[0,10]之间等距离的5个数,左右均为闭区间
a2=np.arange(0, 11, 5)  # [0,11),5为步长生成数组 ,左闭右开
print(a1)
print(a2)

  • 生成随机数组
# 生成均匀分布的一组数[low,high)  左闭右开,size是数量
data1 = np.random.uniform(low=-1, high=1, size=1000000)
########注意这两处的size都可以规定数组形状  size=(8,100)
# 生成正态分布的一组数,loc:均值;scale:标准差,size数量
data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)
print(data1)
print(data2)

运行结果

2.3 索引切片

stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
# 获取第一个股票的前3个交易日的涨跌幅数据
print(stock_change[0, :3])
a[1, 0, 2] = 1000
a[1][0][2] = 1000

2.4 形状改变

stock_change.reshape((10, 8)) # 返回新的ndarray, 原始数据没有改变
stock_change.resize((10, 8)) # 没有返回值, 对原始的ndarray进行了修改
stock_change.T # 转置 行变成列,列变成行  返回一个ndarray,原数据未改变
##reshape()是一个函数,因此第一个括号是函数个括号,而第二个括号是因为传入了一个元##组,其实用列表也可

2.5 类型修改

stock_change.astype("int32")
stock_change.tostring() # ndarray序列化到本地??????

2.6 数组去重

temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(temp)
set(temp.flatten())##set的操作对象需要时一维的,.flatten()可以压缩为一维的

3 ndarray运算

3.1 逻辑运算

  • 运算符
stock_change = np.random.uniform(low=-1, high=1, size=(5,10))
# 逻辑判断, 如果涨跌幅大于0.5就标记为True 否则为False
stock_change > 0.5     
#返回一个True和False的等大小矩阵
stock_change[stock_change > 0.5] = 1.1  
#将>0.5的全部改为1

通用判断函数

#以下两者均只返回一个布尔值
# 判断stock_change[0:2, 0:5]是否全是上涨的
np.all(stock_change[0:2, 0:5] > 0) 
# 判断前5只股票这段期间是否有上涨的
np.any(stock_change[:5, :] > 0)

三元运算符

# np.where(布尔表达式,True的位置的值,False的位置的值),类似于三元运算符,不# 过需要利用函数
np.where(temp > 0, 1, 0)
###涉及符合逻辑需要额外的函数logical_and/or
# 大于0.5且小于1
np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
# 大于0.5或小于-0.5
np.where(np.logical_or(temp > 0.5, temp < -0.5), 11, 3)

3.2 统计运算

  • 主要函数:min max mean median(中位数) var(方差) std(标准差)
  • 使用方法:np.函数名(数组名) 或 数组名.方法名
  • 同时应当注意 axis的使用。 axis=0表示列 axis=1表示行 axis=-1 表示最后一维度
###返回值
stock_change.max()  #将返回最大值
np.max(stock_change,axis=1)#将返回一个向量,即所有行的最大值
###返回索引
np.argmax(tem,axis=0)
np.argmin(tem,axis=0)

3.3 数组运算

  • 数组与数字的运算
    正常的运算即可 加减乘除等
  • 数组与数组的运算
    广播机制

执行broadcast的前提在于,两个nadarray执行的是element-wise的运算,Broadcast机制的功能是为了方便不同形状的ndarray(numpy库的核心数据结构)进行数学运算。

当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。

  • 维度相等
  • shape(其中相对应的一个地方为1)

具体解释解释就是看这个图。

比如(不一定是乘法)数组A*B,将两者的维度写出,如下,将维度从尾部开始对齐,则满足运算的要求是:

  1. 对应的维度相同
  1. 若维度不同,则其中一个维度应当为1

矩阵运算

  • 可以通过np.mat(array)将数组转化为矩阵
  • 矩阵的乘法必须满足运算规则,即(m,n)*(n,l)=(m,l)
    如果是二维数组实现矩阵运算
np.dot(data,data1)
np.matmul(data,data1)
data @ data1

如果是矩阵进行运算

data1*data2
1

3.4 数组合并分割

  • numpy.hstack 水平拼接
  • numpy.vstack 竖拼接
  • numpy.concatenate((a1,a2),axis=0|1) 水平|竖拼接
np.hstack((a, b))
np.vstack((a, b))
np.concatenate((a, b), axis=1)


目录
相关文章
|
14天前
|
XML JSON 数据库
Python的标准库
Python的标准库
133 77
|
15天前
|
XML JSON 数据库
Python的标准库
Python的标准库
42 11
|
28天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
107 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
15天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
23天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
31 4
|
3月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
110 0
|
4月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
66 0
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
51 3
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
69 2
|
3月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
62 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征