当前位置: 首页 > news >正文

Numpy基础(通用函数)

通用函数

Numpy提供了两种基本的对象,即ndarray和ufunc对象。前文已经介绍了ndarray,本
节将介绍Numpy的另一个对象通用函数(ufunc)。ufunc是universal function的缩写,它是
一种能对数组的每个元素进行操作的函数。许多ufunc函数都是用C语言级别实现的,因此
它们的计算速度非常快。此外,它们比math模块中的函数更灵活。math模块的输入一般是
标量,但Numpy中的函数可以是向量或矩阵,而利用向量或矩阵可以避免使用循环语句,
这点在机器学习、深度学习中非常重要。表1-5为Numpy中常用的几个通用函数。

函数使用方法
sqrt计算序列化数据的平方根
sin,cos三角函数
abs计算序列化数据的绝对值
dot矩阵运算
log,log10,log2对数函数
exp指数函数
cumsum,cumproduct累计求和、求积
sum对一个序列化数据进行求和
mean计算均值
median计算中位数
std计算标谁差
var计数方差
corrcoef计算相关系数

1.math与numpy函数的性能比较

import time
import math
import numpy as np# 修复:使用 time.perf_counter()  替代已移除的 time.clock()
x = [i * 0.001 for i in np.arange(1000000)]start = time.perf_counter()  # 修正点1
for i, t in enumerate(x):x[i] = math.sin(t)
print("math.sin:", time.perf_counter() - start)  # 修正点2x = np.array([i * 0.001 for i in np.arange(1000000)])  # 优化:直接生成数组start = time.perf_counter()  # 修正点3
np.sin(x)  # 向量化计算
print("numpy.sin:", time.perf_counter() - start)  # 修正点4

运行结果

math.sin: 0.26994549995288253
numpy.sin: 0.011595400050282478

由此可见,numpy.sin比math.sin快近10倍。

2.循环与向量运算比较

充分使用Python的Numpy库中的内建函数(Built-in Function),来实现计算的向量
化,可大大地提高运行速度。Numpy库中的内建函数使用了SIMD指令。如下使用的向量
化要比使用循环计算速度快得多。如果使用GPU,其性能将更强大,不过Numpy不支持
GPU。PyTorch支持GPU,后面第5章将介绍PyTorch如何使用GPU来加速算法。

import time
import numpy as npx1=np.random.rand(1000000)
x2=np.random.rand(1000000)
##使用循环计算向量点积
tic=time.process_time()
dot=0
for i in range(len(x1)):dot+=x1[i]*x2[i]
toc=time.process_time()
print("dot = "+str(dot)+"\nfor loop ------ Computation time=" +str(1000*(toc-tic))+"ms")
##使用numpy函数求点积
tic=time.process_time()
dot=0
dot=np.dot(x1,x2)
toc=time.process_time()
print("dot ="+str(dot)+"\n vertor version ----- Computation time=" +str(1000*(toc-tic))+"ms")

运行结果

dot = 250103.418572677
for loop ------ Computation time=546.875ms
dot =250103.4185726741vertor version ----- Computation time=31.25ms

从运行结果上来看,使用for循环的运行时间大约是向量运算的400倍。因此,在深度
学习算法中,一般都使用向量化矩阵进行运算。

http://www.dtcms.com/a/322980.html

相关文章:

  • 游游的数组染色
  • 洛谷 滑动窗口 /【模板】单调队列
  • 揭秘MyBatis核心类MappedStatement
  • Java异常:认识异常、异常的作用、自定义异常
  • ChatGPT 5的编程能力宣传言过其实
  • 97-基于Python的大众点评数据分析预测系统
  • 七、《Serverless架构:按毫秒计费的成本革命》--从新浪AI推理平台50%效能提升看无服务器本质
  • 数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!
  • 可视化大屏 SDK 数据结构设计:从拖拽组件到最终渲染的全链路
  • 2025-08-09 李沐深度学习13——经典卷积神经网络 (1)
  • 嵌入式知识日常问题记录及用法总结(一)
  • C++2024 年一级
  • Vue3 学习教程,从入门到精通,Vue 3 + Tailwind CSS 全面知识点与案例详解(31)
  • buuctf:inndy_echo、actf_2019_babystack
  • 花生4CL基因家族鉴定及对干旱与盐胁迫响应分析--文献精读157
  • 【AI论文】种子扩散模型:一种具备高速推理能力的大规模扩散语言模型
  • 智慧农业-无人机视角庄稼倒伏农作物倒伏识别分割数据集labelme格式541张1类别
  • C语言指针完全指南:从入门到精通
  • Selenium使用超全指南
  • OpenCV图像裁剪与 ROI 操作
  • 全志刷机工具:PhoenixSuit-全志芯片处理器-刷机工具安装包及最详细使用教程指南
  • Python day39
  • Web3: 用ERC-1400革新公司股权激励
  • 【原创】基于 Flask 的简单文件收集器
  • 【33】C#实战篇——点击按钮弹出指定路径对话框,选择指定类型文件;;;文件过滤器显示指定的一种文件,几种类型文件 同时显示
  • Pytest中实现自动生成测试用例脚本代码
  • 扩散LLM推理新范式:打破生成长度限制,实现动态自适应调节
  • 在ubuntu服务器下安装cuda和cudnn(笔记)
  • ImageJ 实用技巧:通过 Overlay 实现图像透明标记的完整教程
  • NTP /Chrony 网络时间协议