Numpy基础用法

news2024/10/7 19:21:49

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

import numpy as np
# 创建一个二维ndarray对象
score=np.array([[1,2,3],[4,5,6],[7,8,9]])

1. ndarray相对于list优势

Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。

这是因为**ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的**,所以ndarray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpyndarray不及Python原生list。但在科学计算中,Numpyndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

Numpy底层使用C语言编写,内部解除了GIL【全局解释器锁】,其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。

2. ndarray的属性

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维度
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度【字节】
ndarray.dtype数组元素的类型

可以调用这些属性得知ndarray的基本情况

3. ndarray的类型

类型类型代码描述
int8,uint8i1,u1有符号和无符号的8位整数
int16,uint16i2,u2有符号和无符号的16位整数
int32,uint32i4,u4有符号和无符号的32位整数
int64,uint64i8,u8有符号和无符号的64位整数
float16f2半精度浮点数
float32f4或f标准单精度浮点数
float64f8或d标准双精度浮点数
float128f16或g拓展精度浮点数
complex64c8,c16,c32分别基于32位,64位,128位浮点数的复数
complex128👆
complex256👆
bool?布尔值,存储TrueFalse
objectoPython object类型
string_S修正的ASCII字符串类型,例如生成一个长度为10的字符串类型,使用S10
unicode_U修正的Unicode类型,生成一个长度为10Unicode类型,使用U10
import numpy as np
# 创建一个二维ndarray对象,指定元素类型为float32,dtype='f4'与之等价
score=np.array([[1,2,3],[4,5,6],[7,8,9]],dtype=np.float32)
# 使用astype()方法可以显示转换类型,tobytes()改为字节型
score = score.astype(np.float64)

若不指定,整数默认int64,小数默认float64

4. 生成ndarray的方法

numpy库的导入语句在后续例子中省略

  • np.array(list):将输入数据(可以是列表、元组以及其他序列)转换为ndarray,如不显式指明数据类型,将自动推断;默认复制所有的输入数据

    asarray(list):将输入转换为ndarray,但如果输入已经是ndarray则不再复制

    import numpy as np
    data = np.array([[1.5, -0.1, 3], [0, -3, 6.5]])
    print(data)
    
    image-20230411173506006
  • np.arrage(start,stop,step)Python内置函数range的数组版,返回一个数组

    生成范围[start,stop),步长为stepndarrystart默认为0step默认为1

    # 生成的数组a为:[1,3,5]
    a = np.arange(start=1, stop=6, step=2)
    
  • np.ones((shape),dtype):生成指定shape的全1数组,dtype默认为float64

    np.ones_like(arr):根据所给数组生成一个形状一样的全1数组

    a = np.ones((2, 3), dtype='f4')
    print(a)
    
    image-20230411181548186
  • np.zeros((shape),dtype):生成指定shape的全0数组,dtype默认为float64

    np.zeros_like(arr):根据所给数组生成一个形状一样的全0数组

    使用方式如上ones方法👆

  • np.empty((shape),dtype):生成指定shape的没有初始化值的空数组,dtype默认为float64

    np.empty_like(arr):根据所给数组生成一个形状一样的没有初始化值的空数组

  • np.full((shape), fill_value,dtype):生成指定shape的值全为fill_value的数组,dtype默认为int64

    np.ones_like(arr):根据所给数组生成一个形状一样的值全为fill_value的数组

    a = np.full(shape=(2, 3), fill_value=5)
    
    image-20230411182531467
  • np.identity(n,dtype):生成n*n的矩阵,对角线元素全1,其余全0dtype默认为float64

4.1 伪随机数生成

  • np.random.randint(low,high,(size)):生成size形状【sizeint时一维】的数组,其值在[low,high)之间

    # 生成3*3的矩阵,其值在[3,5)之间
    score = np.random.randint(3, 5, (3, 3))
    
    image-20230411184051732
  • np.random.rand(shape) :生成shape形状的数组,值为[0,1)内的一组均匀分布数,用法与正态分布的randn类似👇

  • np.random.uniform(low=0.0,high=1.0,size=None):从一个均匀分布[low,high)中随机采样,形状与size中描述一致

    score = np.random.uniform(low=0.0, high=1.0, size=(3, 3))
    
    image-20230411190739420
  • np.random.randn(shape):生成shape形状的数组,其值是标准正态分布随机数

    score = np.random.rand(3, 3)
    
    image-20230411184625869
  • np.random.normal(loc=0.0, scale=1.0, size=None):传入μ和从而得到正态分布

    • locfloat类型,正态分布的均值【 μ \mu μ,此值是正态分布峰值横坐标】
    • scalefloat类型,正态分布的标准差【σ,此值越大图形越胖,越小越高】
    • size:输出的shape,默认为None,只输出一个值
    # 生成均值为1.75,标准差为1的正态分布数据,5个
    score = np.random.normal(1.75, 1, 5)
    
    image-20230411185547043

numpy.random中其他伪随机数方法

函数描述
seed确定随机数生成器的种子
permutation返回一个序列的随机排列或返回一个随机排列的范围
shuffer对一个序列就地随机排列
binomial产生二项分布的样本值
beta产生Beta分布的样本值
chisquare产生卡方分布的样本值
gamma产生Gamma分布的样本值

5. ndarray形状修改

np.reshape(shape)/resize(new_shape)/T

reshape返回一个具有相同数据域,但形状不一样的视图;resize则是在原数组上进行修改;T则是ndarray的一个属性,表示转置后的ndarray

# 在转换形状的时候,一定要注意数组的元素匹配
arr = np.array([[1,2,3],[4,5,6]])
# 将arr由2行3列修改为3行2列
arr = arr.reshape([3,2])
# 将arr修改为3列,行数通过内部计算得到,目前待定
arr.reshape((-1,3)) 

6. ndarray进行数据筛选

6.1 逻辑运算

# 生成4行6列的矩阵,取值在[3,5)之间
arr = np.random.randint(3,5,[4,6])
# arr取行下标为2之后的行以及列下标为4【不包括】之前的列构成新数组arr1
# 逗号左边是行的取值情况,右边是列的取值情况,分别切片
arr1 = arr[2:,:4]
# arr1中大于3的赋为True,其余赋为False,得到一个新的布尔类型数组
bool_arr = arr1 > 3
# 将arr1中大于3的部分赋值为1
arr1 [ bool_arr ] = 1

6.2 通用判断函数

# 每行代表不同学生,每列代表不同科目
score = np.array([[70, 60, 81], [99, 97, 94], [30, 52, 79]])
# 判断前两名同学的成绩是否全及格,全部及格返回True
flag = np.all(score[:2, :] > 60)
# 判断前两名同学的成绩是否有大于80分的,有一个就返回True
np.any(score[:2, :] > 80)

6.3 三元运算符

# arr1中大于1的部分赋1,其余赋0
np.where(arr1 > 1, 1, 0)
# 复合逻辑需要结合np.logical_and和np.logical_or使用
# arr1中大于60且小于90的部分赋1,其余赋0
np.where(np.logical_and(arr1 > 60, arr1 < 90), 1, 0)
# arr1中大于60或者小于50的部分不变,其余赋0
np.where(np.logical_or(arr1 > 60, arr1 < 50), arr1, 0)

7. ndarray的运算

任何在两个等尺寸数组之间的算术操作都应用了逐元素操作的方式

a=np.array([[2,3],[4,5]])
b=np.array([[1,2],[3,4]])

# 对应元素相乘(除,加,减)
a *[/,+,-] b

# a矩阵每个元素取倒数
1 / a

# a矩阵每个元素的0.5次方
a ** 0.5

# 同形状数组比较,返回布尔数组 
a > b

7.1 常用一元通用函数

通用函数ufunc是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器

一元通用函数指对一个ndarray操作的通用函数

函数说明
abs,fabs计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt计算各元素的平方根(等价于arr ** 0.5
square计算各元素的平方,(等价于arr **2
exp计算各元素的自然指数值 e x e^x ex ,其中x是数组元素
log, log10, log2, log1p分别为底数为e, 底数为10, 底数为2,底数为1+xlog
sign计算各元素的正负号:1(正数),0(零),-1(负数)
ceil计算大于等于该值的最小整数
floor计算小于等于该值的最大整数
rint将各元素值四舍五入到最接近的整数,保留dtype
modf将数组的小数和整数部分以两个独立数组的形式返回【两个接收值】
isnan返回一个表示“哪些值是NaN”的布尔型数组
isfinite,isinf分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组
cos,cosh,arccos普通型,双曲型三角函数和反三角函数【sin,tan有类似用法】
logical_not计算各元素not x的真值,相当于~arr

7.2 常用二元通用函数

函数说明
add将数组中对应的元素相加
subtract从第一个数组中减去第二个数组中的元素
multiply数组元素相乘
divide,floor_divide除法或向下圆整除法【丢弃余数】
power对第一个数组中的元素A,根据第二个数组中的相应元素B,计算 A B A^B AB
maximum,fmax保留同一位置中的最大值,fmax将忽略NaN元素级的最小值计算【min用法类似】
mod对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A%B
copysign将第二个数组中的值的符号复制给第一个数组中的值
greater,greater_equal
less,less_equal
equal,not_equal
执行元素级的比较运算,最终产生布尔型数组
相当于运算符>、>=、<、<=、==、!=
logical_and
logical_or
logical_xor
执行元素级的真值逻辑运算
相当于运算符`&、

7.3 常用统计函数

方法说明
sum对数组中全部或某轴向【axis参数】的元素求和,零长度sum0
布尔值存储True强制为1False0,因此可用于统计True个数
mean算数平均数,零长度的数组的meanNaN
std,var分别为标准差和方差,自由度可调(默认为n
min,max最大值和最小值
argmin,argmax分别为最大和最小元素的索引
cumsum所有元素的累计和
cumprod所有元素的累计积

7.4 常用集合操作

方法描述
unique计算数组中的唯一元素,并返回有序结果【一维】
intersect1d计算xy中的公共元素,并返回有序结果【一维】
union1d计算xy的并集,并返回有序结果【一维】
in1d得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d集合的差,即元素在x中且不在y
setxor1d集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素

7.5 线性代数

Numpy的线性代数*是矩阵逐元素乘积,而不是矩阵点乘积【点乘是@】,T属性是矩阵转置

7.5.1 numpy常用线代方法

方法说明
diag以一维数组的形式返回方阵的对角线元素,或将一维数组转换为方阵(非对角线元素为0)
dot矩阵点乘【效果与@运算符一致】
trace计算对角线元素和【迹】

7.5.2 numpy.linalg常用方法

numpy.linalg拥有一个矩阵分解的标准函数集以及其他常用函数,例如求逆和行列式求解等

方法说明
det计算矩阵行列之
eig计算方阵的特征值和特征向量
inv计算方阵的逆矩阵
pinv计算矩阵的Moore-Penrose伪逆
qr计算QR分解
svd计算奇异值分解【SVD
solve解线性方程组Ax = b,其中A为一个方阵
lstsq计算Ax = b的最小二乘解

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

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

相关文章

【项目分析】基于工艺融合的数控编程方法的设计与实现

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招项目的&#xff0c;按照面试常问及项目核心点整理 &#x1f970;来源&#xff1a;该项目源于数控系统迭代的实验项目 &#x1f92d;结语&#xff1a;如果有帮到你的地方&#xff0c;就点个赞和关注…

新版 Spring Security 配置的变化

进入到 SpringBoot2.7 时代&#xff0c;有小伙伴发现有一个常用的类忽然过期了&#xff1a; 在 Spring Security 时代&#xff0c;这个类可太重要了。过期的类当然可以继续使用&#xff0c;但是你要是决定别扭&#xff0c;只需要稍微看一下注释&#xff0c;基本上就明白该怎么玩…

机器视觉公司,在玩一局玩不起的游戏

导语 有个著名咨询公司曾经预测过&#xff1a;未来只有两种公司&#xff0c;是人工智能的和不赚钱的。 它可能没想到&#xff0c;还有第三种——不赚钱的AI公司。 去年我们报道过“正在消失的机器视觉公司”&#xff0c;昔日的“AI 四小龙”&#xff08; 商汤、旷视、云从、依图…

大数据 | HBase基本工作原理

前文回顾&#xff1a;MapReduce基本原理 目录 &#x1f4da;HBase基本介绍 &#x1f407;HBase的设计目标和功能特点 &#x1f407;HBase在Hadoop中的生态环境 &#x1f4da;HBase的数据模型 &#x1f407;逻辑数据模型 &#x1f407;物理存储格式 &#x1f4da;HBase基…

rust网络编程以及unsafe模块

网络层目前 IPv4 和 IPv6 分庭抗礼&#xff0c;IPv6 还未完全对 IPv4 取而代之&#xff1b;传输层除了对延迟非常敏感的应用&#xff08;比如游戏quic协议&#xff09;&#xff0c;绝大多数应用都使用 TCP&#xff1b;而在应用层&#xff0c;对用户友好&#xff0c;且对防火墙友…

PageRank算法介绍

互联网上有数百亿个网页&#xff0c;可以分为这么几类&#xff1a;不含有用信息的&#xff0c;比如垃圾邮件&#xff1b;少数人比较感兴趣的&#xff0c;但范围不是很广的&#xff0c;比如个人博客、婚礼公告或家庭像册&#xff1b;很多人感兴趣的并且十分有用的&#xff0c;比…

基于DBN神经网络的语音分类识别

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的语音分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法应用于语音分类 DBN神…

排污口漂浮物监测系统 yolov5

排污口漂浮物监测系统通过YOLOV5网络模型技术&#xff0c;排污口漂浮物监测算法模型对河道两岸各处排污口进行7*24小时不间断实时监测&#xff0c;当监测到河道两岸的排污口违规乱排乱放时&#xff0c;不需人为干预系统立即抓拍存档告警。我们选择当下YOLO卷积神经网络YOLOv5来…

实现数字化转型升级,快速开发平台流辰信息来助力!

在如今迅猛发展的年代里&#xff0c;科技的力量是伟大的&#xff0c;可以让老百姓的生活变得丰富多彩&#xff0c;也可以让各行各业的企业实现办公自动化&#xff0c;朝着数字化转型升级&#xff0c;快速提升办公协作效率。快速开发平台流辰信息作为一家低代码平台服务商&#…

(顺序栈)有效括号序列

文章目录前言&#xff1a;问题描述&#xff1a;问题解析&#xff1a;代码实现&#xff1a;总结&#xff1a;前言&#xff1a; 此篇是针对顺序栈的经典练习题。 问题描述&#xff1a; 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘…

iOS / iPadOS 15.7.4发布安全更新 旧版iPhone和ipad无法升级系统解决方法

苹果于昨日面向无法升级到 iOS / iPadOS 16 的旧款 iPhone 和 iPad&#xff0c;发布了 iOS / iPadOS 15.7.4 更新。本次更新并未引入新的功能&#xff0c;而是重点修复了存在于 WebKit 的两个“关键”漏洞。 iOS / iPadOS 15.7.4发布安全更新&#xff1a; 目前已经有充足的证据…

adb基本操作操作

Mumu模拟器 进入终端 cd C:\Program Files\Netease\MuMuPlayer-12.0\shell 获取root权限 adb root 连接手机 adb connect 127.0.0.1:7555 adb shell 查看连接多少台设备 adb devices 安装程序apk adb install C:\Android\CalcTest.apk adb install -r C:\Android\CalcT…

遥感常用库的比较:Rasterio vs GDAL

一、前言本博客对三种栅格处理工具做一个小小的比较&#xff1a;Python (rasterio) 和 GDAL。当我开始使用 GIS 和栅格处理时&#xff0c;我并没有真正关注我编写的脚本和使用的工具的性能。 但现在&#xff0c;处理更大的数据、更高的空间分辨率、快速处理我的光栅文件是成功的…

国产PIE-SAR软件

1.产品定位 PIE-SAR是一款针对国内外主流星载SAR传感器的数据处理分析软件&#xff0c;提供图形化操作界面。目前已支持国内外主流星载SAR传感器的数据处理与分析&#xff0c;包括强度图像基础处理、区域网平差处理&#xff08;含异源匹配、RD/RPC区域网平差&#xff09;、InS…

TensorFlow 1.x 深度学习秘籍:1~5

原文&#xff1a;TensorFlow 1.x Deep Learning Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

知识图谱学习笔记——(二)知识图谱的表示

一、知识学习 声明&#xff1a;知识学习中本文主体按照浙江大学陈华钧教授的《知识图谱》公开课讲义进行介绍&#xff0c;并个别地方加入了自己的注释和思考&#xff0c;希望大家尊重陈华钧教授的知识产权&#xff0c;在使用时加上出处。感谢陈华钧教授。 &#xff08;一&…

Node版本管理工具

一、nvm简述 官网地址&#xff1a;https://nvm.uihtm.com/ nvm&#xff08;全称&#xff1a;node.js version management&#xff09;&#xff0c;是一个nodejs的版本管理工具&#xff0c;为解决node.js各种版本存在不兼容问题&#xff0c;可以使用nvm工具快速安装和切换不同版…

领英精灵安全吗?附LinkedIn(领英)开发客户的关键点

面对全球最大的职场社交平台——LinkedIn(领英)&#xff0c;很多蠢蠢欲动的外贸新人经常会问到&#xff1a;为什么那么多的外贸培训课程&#xff0c;机构和讲师以及一些外贸老鸟都会提到“如果想要把LinkedIn(领英)经营成一个有效的客户开发渠道&#xff0c;都会建议利用针对Li…

【机器学习】P17 梯度下降 与 梯度下降优化算法(BGD 等 与 Adam Optimizer、AdaGrad、RMSProp)

梯度下降与梯度下降算法梯度下降梯度下降算法基础优化算法批量梯度下降 BGD随机梯度下降 SGD小批量梯度下降 MBGD动量梯度下降 MGD基础优化算法上的改进和优化的算法自适应梯度算法 Adagrad均方根传播算法 RMSProp自适应矩估计算法 Adam代码如何实现梯度下降如何判断收敛梯度下…

pytorch搭建ResNet50实现鸟类识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第J1周&#xff1a;ResNet-50算法实战与解析 &#x1f356; 作者&#xff1a;K同学啊 理论知识储备 深度残差网络ResNet&#xff08;dee…