【Python 零基础入门】Numpy 常用函数 通用函数 保存加载

news2024/11/30 10:37:18

【Python 零基础入门】内容补充 4 Numpy 常用函数 通用函数 & 保存加载

  • 概述
  • 通用函数
    • np.sqrt 平方根
    • np.log 对数
    • np.exp 指数
    • np.sin 正弦
  • 点积和叉积
    • np.dot 点积
    • 叉积
  • 矩阵乘法
    • np.matmul
    • @
  • 保存 & 加载
    • np.save 保存单个数组
    • np.savez 保存多个数组
    • np.savez_compressed 保存
    • np.load 加载
    • npy vs npz

概述

Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数.

Python Numpy 常用函数

通用函数

通用函数 (Ufuncs) 是 numpy 的核心部分. 通用函数提供了快速的元素级运算. 这些函数都是在 C 语言级别编写的, 因此能提供 Python 所不具备的高性能. 通用函数的另一个又是是能够直接读取数据, 避免了在 Python 循环中处理数据的开销.

Numpy 通用函数

np.sqrt 平方根

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
sqrt_array = np.sqrt(array)

# 调试输出
print("原始数组:", array)
print("平方根数组:", sqrt_array)

输出结果:

原始数组: [1 2 3]
平方根数组: [1.         1.41421356 1.73205081]

np.log 对数

np.log对数组中每个元素计算自然对数 l o g e ( X ) log_e(X) loge(X)

例子:

# 原始数组
array = np.array([1, 2, np.e])

# 对数
log_array = np.log(array)

# 调试输出
print("原始数组:", array)
print("对数数组:", log_array)

输出结果:

原始数组: [1.         2.         2.71828183]
对数数组: [0.         0.69314718 1.        ]

np.exp 指数

np.exp对数组中每个元素计算自然指数 e x e^x ex

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
exp_array = np.exp(array)

# 调试输出
print("原始数组:", array)
print("指数数组:", exp_array)

输出结果:

原始数组: [1 2 3]
指数数组: [ 2.71828183  7.3890561  20.08553692]

np.sin 正弦

例子:

# 原始数组
array = np.array([1, 2, 3])

# 正弦 sin
sin_array = np.sin(array)

# 调试输出
print("原始数组:", array)
print("正弦数组:", sin_array)

输出结果:

原始数组: [1 2 3]
正弦数组: [0.84147098 0.90929743 0.1411200

点积和叉积

np.dot 点积

点积 (Dot Product) 是线性代数中的基本运算. 点积是将两个向量的对应坐标相乘然后求和的运算.

对于两个变量 a 和 b, 他们的点积 a ⋅ b = a 1 b 1 + a 2 b 2 + . . . + a n b n a \cdot b = a_1b_1 + a_2b_2 + ... + a_nb_n ab=a1b1+a2b2+...+anbn

例子:

# 定义两个向量
a = np.array([1, 2])
b = np.array([3, 4])

# 计算点积
dot_result = np.dot(a, b)  # 1*3 + 2*4 = 11

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("点积结果:", dot_result)

输出结果:

数组 a: [1 2]
数组 b: [3 4]
点积结果: 11

叉积

叉积 (Cross Product) 也是线性代数中的基本运算. 叉积是一个向量运算, 其结果是一个新的向量. 叉积的方向遵循右手定则, 大小等于两个向量构成的平行四边形的面积. 对于三味空间中的两个向量 a 和 b, 它们的叉积是 a × b = ( a 2 b 3 − a 3 b 2 , a 3 b 1 − a 1 b 3 , a 1 b 2 − a 2 b 1 ) a \times b = (a_2b_3 - a_3b_2, a_3b_1 - a_1b_3, a_1b_2 - a_2b_1) a×b=(a2b3a3b2,a3b1a1b3,a1b2a2b1)

例子:

# 定义两个三维向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 计算叉积
cross_result = np.cross(a, b)  # 2*6 - 3*5, 3*4 - 1*6, 1*5 - 2*4 = [-3, 6, 3]

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("叉积结果:", cross_result)

输出结果:

数组 a: [1 2 3]
数组 b: [4 5 6]
叉积结果: [-3  6 -3]

矩阵乘法

矩阵乘法 (Matrix Multiplication) 是将 A, B 两个矩阵相乘得到一个新的矩阵 C. 其元素由 A 的行和 B 的列对应的元素相乘然后求和得到.

np.matmul

例子:

# 定义两个矩阵
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# 使用 np.matmul 进行矩阵乘法
matmul_result = np.matmul(matrix1, matrix2)
# 1*5 + 2*7, 1*6 + 2*8 = [19, 22]
# 3*5 + 4*7, 3*6 + 4*8 = [43, 50]

# 调试输出
print("矩阵1:", matrix1, sep="\n")
print("矩阵2:", matrix2, sep="\n")
print("使用 np.matmul:", matmul_result, sep="\n")

输出结果:

矩阵1:
[[1 2]
 [3 4]]
矩阵2:
[[5 6]
 [7 8]]
使用 np.matmul:
[[19 22]
 [43 50]]

@

例子:

# 定义两个矩阵
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])


# 使用 @ 运算符进行矩阵乘法
operator_result = matrix1 @ matrix2
# 1*5 + 2*7, 1*6 + 2*8 = [19, 22]
# 3*5 + 4*7, 3*6 + 4*8 = [43, 50]

# 调试输出
print("矩阵1:", matrix1, sep="\n")
print("矩阵2:", matrix2, sep="\n")
print("使用 @:", operator_result, sep="\n")

输出结果:

矩阵1:
[[1 2]
 [3 4]]
矩阵2:
[[5 6]
 [7 8]]
使用 @:
[[19 22]
 [43 50]]

保存 & 加载

在日常编程中, 我们经常需要将 Numpy 数组保存到文件中, 以便日后加载和食用. 下面我们来讲一下如恶化保存和加载 ndarray 对象.

Numpy 保存加载

np.save 保存单个数组

np.save将单个 ndarray 保存到一个二进制文件中, 文件扩展名通常为 “.npy”.

例子:

# 创建数组
array = np.array([1, 2, 3, 4])

# 保存数组
np.save("array.npy", array)

np.savez 保存多个数组

np.savez将多个 ndarray 保存到一个二进制文件中, 文件扩展名通常为 “.npy”.

例子:

# 创建数组
array1 = np.array([1, 2, 3, 4])
array2 = np.array([5, 6, 7, 8])

# 保存多个数组
np.savez("arrays.npz", array1=array1, array2=array2)

np.savez_compressed 保存

np.savez_compressednp.savez不同, 会对数组进行压缩.

例子:

# 创建数组
array1 = np.zeros(30000)
array2 = np.ones(30000)

# 保存多个数组
np.savez("arrays.npz", array1=array1, array2=array2)
np.savez_compressed("arrays_compressed.npz", array1=array1, array2=array2)

# 查看文件大小
arrays_size = os.path.getsize("arrays.npz")
arrays_compressed_size = os.path.getsize("arrays_compressed.npz")
print("无压缩大小: {} kb".format(arrays_size // 1024))
print("压缩大小: {} kb".format(arrays_compressed_size // 1024))

输出结果:

无压缩大小: 469 kb
压缩大小: 1 kb

np.load 加载

np.load可以帮助我们加载保存的文件, 加载 “.npy” 和 “.npz” 文件.

加载单个数组:

# 加载单个数组
array = np.load("array.npy")
print(array)

输出结果:

[1 2 3 4]

加载多个数组:

# 加载多个数组
loaded_array = np.load("arrays.npz")
array1 = loaded_array["array1"]
array2 = loaded_array["array2"]
print(array1)
print(array2)

输出结果:

[1 2 3 4]
[5 6 7 8]

npy vs npz

npy 文件:

  • 单个数组: .npy 格式用于保存单个 NumPy 数组
  • 二进制: .npy 是一个二进制文件, 数据以二进制形式存储在文件中. 这样可以更快的读写数据, 并更紧凑的存储, 不会像文件那样占用额外的空间.
  • 无压缩: .npy 文件不提供压缩功能, 保存的文件大小直接对应于数组内容的大小

npz 文件:

  • 多个数组: .npz 格式用于保存多个 NumPy 数组. 通过将数组以关键字参数的形式传递给np.saveznp.savez_compressed函数来实现
  • 压缩: .npz 文件可以选择压缩与否. 使用np.savez时, 数据不会被压缩, 而使用np.savez_compressed函数时, 所有数据都会被压缩. 通过压缩可以显著减少文件的大小, 特别是对于包含大量重复数据的数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon计算点到直线的垂线方程

一、我们都知道,点到直线最短距离就是垂线。Halcon也有现成的算子可以计算点到直线的距离 distance_pl( : : Row, Column, Row1, Column1, Row2, Column2 : Distance)。但是此算子不会返回具体的垂点坐标。当我们希望显示垂线的时候是需要知道垂点坐标,才…

目前比较好用的护眼台灯?最好用的五款护眼台灯推荐

灯具可以说是我们日常生活中使用很频繁的工具了,我们每天都离不开它给我们带来的光亮。当然,现在灯具也有很多种类可以挑选,今天主要带来五款非常好用的护眼台灯指南。 1.书客护眼台灯Pro 使用体验分数:10分 亮点:具…

我的1024创作纪念日

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 机缘 起初我并没有写博客这个习惯&#xff…

酷开会员丨相约酷开系统追剧,看漫画IP《一人之下》究竟有何魅力?

8月份,由国产动漫《一人之下》改编的电视剧《异人之下》空降播出的第二天,突然宣布由于“介质原因”本片将延期播出。官宣当日即开播、开播次日即停播,《异人之下》的初登场看上去就像一则极具国产特色的超短篇笑话。之后,当我们几…

numpy中的log和ln函数介绍

np.log()指代的便是数学中使用的ln函数。 np.log10()指代的便是数学中使用的lg函数。 import numpy as npprint(np.log(np.e))print(np.log10(100))

python脚本,实现监控系统的各项资源

shigen坚持日更的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考,不断沉淀和成长。 今天的文章涉及到docker的操作和一个python脚本,实现监控网络的流量、CPU使用…

SSL证书在网购中的重要性

近年来,互联网的快速发展使得线上服务范围不断延伸,这其中网络购物更是在全球范围内都呈现上升趋势。然而病毒攻击,网络钓鱼攻击和恶意软件攻击无处不在,网上购物的安全性受到极大威胁。为了保护网络购物的安全,构建可…

cpu算力DMIPS说明

DMIPS即以dhrystone程式为测量方式标准的mips值,DMIPS即million instruction per second,每秒百万个指令,即处理器每秒能运行多少百万个指令。 D是Dhrystone的缩写,表示的是基于Dhrystone这样一种测试方法下的 MIPSQ。Dhrystone是…

HTTP 协议请求头 If-Match、If-None-Match 和 ETag

概述 在 HTTP 协议中,请求头 If-Match、If-None-Match、If-Modified-Since、If-Unmodified-Since、If-Range 主要是为了解决浏览器缓存数据而定义的请求头标准,按照协议规范正确的判断和使用这几个请求头,可以更精准的处理浏览器缓存&#x…

制造业经营效益差?业务数据管理是关键

《中国制造2025》 指出,目前中国制造业整体尚处于由工业2.0向工业3.0过渡的阶段,而欧美的制造强国已提出工业4.0概念,由“制造”迈向“智造”, 实现智能工厂、 智能生产和智能物流,建立一个高度灵活的个性化和数字化的…

.NET Core 中插件式开发实现

在 .NET Framework 中,通过AppDomain实现动态加载和卸载程序集的效果;但是.NET Core 仅支持单个默认应用域,那么在.NET Core中如何实现【插件式】开发呢? 一、.NET Core 中 AssemblyLoadContext的使用 1、AssemblyLoadContext简…

Git 删除本地和远程分支

目录 删除本地和远程分支分支删除验证验证本地分支验证远程分支 开源项目微服务商城项目前后端分离项目 删除本地和远程分支 删除 youlai-mall 的 dev 本地和远程分支 # 删除本地 dev 分支(注:一定要切换到dev之外的分支才能删除,否则报错&…

【Proteus仿真】【STM32单片机】数控稳压可调电源设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用动态数码管、按键、PCF8591 AD/DAC、LM358放大电路模块等。 主要功能: 系统运行后,系统默认输出直流5V,数码…

Linux普通用户提权(sudo)

文章目录 Linux普通用户提权(sudo)1、在sudoers文件添加普通用户2、测试 Linux普通用户提权(sudo) 1、在sudoers文件添加普通用户 正常来说,普通用户初始是不具备提权的能力的,比如执行sudo ls会出现报警告…

内置对象和方法、前端基础之BOM和DOM

内置对象和方法 RegExp对象 // 定义正则表达式两种方式 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;// 正则校验数据 reg1.test(jason666) reg2.test(jason666)/*第一个注意事项,正则表达式中不能有…

基于闪电连接过程算法的无人机航迹规划-附代码

基于闪电连接过程算法的无人机航迹规划 文章目录 基于闪电连接过程算法的无人机航迹规划1.闪电连接过程搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用闪电连接过程算法来优化无…

智能政务,办事更轻松!拓世法宝AI智慧政务数字人一体机,重新定义你的政务办理体验!

在构建现代化的政务服务体系中,高效、便捷是最重要的衡量标准。随着信息化技术的发展,很多政务服务已经实现了重要的线上办理,减轻了公民和企业的办事负担,同时也提升了政府部门的服务效率。可是,一些场景下的办事流程…

工业制造:如何有效监测漏水事件,让老板都挑不出毛病?

水浸监控技术作为一种关键的安全措施,在不同领域中扮演着至关重要的角色。随着自然灾害和人为事件的不断增加,包括洪水、泄漏和管道破裂等,对水浸监控系统的需求变得越来越紧迫。 客户案例 工业制造业 在工业制造领域,水浸监控系统…

素材收藏必备!免费获取这5个矢量图标库,设计更得心应手!

可以自由拉伸的矢量图标,在平面设计流程中的重要性,有过设计经验的用户一定不会陌生。 下面,我们给大家准备了5个免费使用的矢量logo图标库,建议大家一键收藏。 1:即时设计 即时设计的资源社区内有海量免费的矢量图…

kruskal求最小生成树

算法思路: 将所有边按照权值的大小进行升序排序,然后从小到大一一判断。 如果这个边与之前选择的所有边不会组成回路,就选择这条边分;反之,舍去。 直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。 筛选出来的边…