day14numpy

news2024/10/21 21:02:55

NumPy 

基础

1.1概念


NumPy(Numeric Python)是Python的第三方扩展包,主要用于计算和处理一维或多维数组。它在数组算术计算方面提供了大量数学函数,底层用C语言编写,能够高速执行数值计算。NumPy的数据结构非常适合数组和矩阵的运算。

1.2 优点

1.是Python科学计算的基础库。

2.可对数组进行高效的数学运算。

3.ndarray对象用于构建多维数组。

4.能够执行傅立叶变换与重塑多维数组形状。

5.提供了线性代数及随机数生成的内置函数。

1.3 与Python列表的区别

1.NumPy数组是同质的(homogeneous),即所有元素必须是相同的数据类型,在创建时指定。

2.Python列表是异质的(heterogeneous),可以包含不同类型的数据。

3.NumPy数组提供了丰富的数学函数和操作,如矩阵运算、线性代数等。

4.Python列表提供基本的列表操作,如添加、删除、切片、排序等。

1.4 安装


NumPy可以通过Python的包管理工具pip进行安装。例如:

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

ndarray

通过array函数或其他NumPy函数(如zeros、ones、arange等)创建。

提供了丰富的数学函数和操作,如矩阵运算、线性代数等。

在内存中是连续存储的,数组的访问和操作非常高效。

数据类型


NumPy提供了比Python更丰富的数据类型,包括:

布尔型(bool_)

多种整数类型(如int8、int16、int32、int64、uint8等)

多种浮点数类型(如float16、float32、float64)

复数类型(如complex64、complex128)

字符串类型(str_、U)

时间间隔(m)和日期时间(M)

Python对象类型(O)

字节串(S、a)和Unicode(U)

原始数据(V)

数据类型对象

在创建数组时指定 dtype 参数来定义数组中元素的数据类型。

使用数组的 dtype 属性来获取数组中元素的数据类型。

使用 astype() 方法来转换数组中元素的数据类型。

数组属性

shape:返回数组维度的元组,或用于调整数组维度大小。

ndim:返回数组的维数。

itemsize:返回数组中每个元素的大小(以字节为单位)。

flags:返回ndarray数组的内存信息。

创建数组的其他方法

empty():创建一个指定形状和数据类型但未初始化的数组。

zeros():创建一个指定形状和数据类型并初始化为零的数组。

ones():创建一个指定形状和数据类型并初始化为一的数组。

arange():根据指定的起始值、终止值和步长生成一个一维数组。

linspace():在指定的数值区间内返回均匀间隔的一维等差数组。

 Slice()

在 NumPy 中,slice 对象提供了一种灵活的方式来获取数组的子集或片段。与 Python 中的标准切片操作类似,NumPy 允许你创建一个 slice 对象,并利用它来访问数组的一部分内容。

1. Slice 对象的基本概念

slice 是一个内置对象,通常用于数组的切片操作。你可以通过指定开始位置(start)、结束位置(stop)和步长(step)来创建一个 slice 对象。然后,可以使用这个对象作为索引来访问数组的元素。

start:切片开始的位置(包含该位置)。

stop:切片结束的位置(不包含该位置)。

step:切片的步长,即选取元素的间隔。

使用 Slice 对象进行数组切片

在 NumPy 中,ndarray 对象支持使用 slice 对象进行索引。这意味着你可以创建一个 slice 对象,并将其作为索引传递给数组,以获取所需的部分数组。

Slice 对象的参数解释

start:指定切片的起始位置。如果省略,则默认为数组的起始位置(索引0)。

stop:指定切片的结束位置。注意,切片不包含该位置的元素。如果省略,则默认为数组的结束位置。

step:指定切片的步长。如果省略,则默认为1,表示逐个元素地选取。

应用 Slice 对象

多维数组切片:在多维数组中,你可以为每个维度指定一个 slice 对象来进行切片操作。这样,你可以从多维数组中提取出任意形状的子数组。

动态切片:在某些情况下,你可能需要动态地指定切片的参数。这可以通过在运行时计算 startstop 和 step 的值来实现。

索引

高级索引

NumPy 中的高级索引是一种强大的功能,它允许使用整数数组、布尔数组或其他序列来访问和操作数组的元素。这种索引方式比基本索引更加灵活,可以实现对数组的复杂操作和修改。

整数数组索引

整数数组索引是指使用一个数组(索引数组)来访问另一个数组(目标数组)的元素。索引数组中的每个元素都指定了目标数组中某个维度上的索引值。通过这种方式,可以一次性访问目标数组中的多个元素,可以选取特定位置的元素。以及可以实现复杂的元素选择。

使用整数数组进行索引,具体来说,当使用整数数组索引时,索引数组中的每个元素都会作为目标数组对应维度上的索引,从而选取出目标数组中对应的元素。如果索引数组是多维的,那么会按照索引数组的形状来选取目标数组中的元素,形成一个新的数组。

 布尔索引

1.布尔索引是一种通过布尔运算(如比较运算符)来获取符合指定条件的元素的数组的方法。允许根据条件表达式的结果(True 或 False)来选择数组中的元素。

2.在使用布尔索引时,首先需要构造一个布尔数组,其形状与目标数组相同。布尔数组中的每个元素都对应目标数组中的一个元素,并表示该元素是否满足指定的条件。然后,通过布尔数组来索引目标数组,从而获取所有满足条件的元素。

3.布尔索引非常直观且易于使用,它允许对数组进行复杂的条件筛选和操作。例如,可以使用布尔索引来筛选出数组中大于某个值的所有元素,或者根据多个条件组合来筛选元素。

案例1:一维数组的布尔索引

假设我们有一个一维数组 `arr`,我们想要获取所有大于5的元素。可以使用布尔索引来实现这一点:

python

import numpy as np

# 创建一个一维数组

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 使用布尔索引筛选大于5的元素

bool_idx = arr > 5

result = arr[bool_idx]

print(result)  # 输出: [6 7 8 9 10]

案例2:二维数组与一维数组相加

import numpy as np

# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
# 创建一个一维数组
arr1d = np.array([10, 20, 30])
# 相加
result = arr2d + arr1d


print(result)
# 输出:
# [[11 22 33]
#  [14 25 36]]

arr1d 被广播到与 arr2d 相同的形状,然后进行逐元素相加。

案例3:二维数组与二维数组相加

import numpy as np

# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6]])

# 创建一个形状为 (1, 3) 的二维数组
arr2d_broadcast = np.array([[10, 20, 30]])

# 相加
result = arr2d + arr2d_broadcast

print(result)
# 输出:
# [[11 22 33]
#  [14 25 36]]

arr2d_broadcast 被广播到与 arr2d 相同的形状,然后进行逐元素相加。

广播


NumPy支持广播机制,允许在不同大小的数组上进行算术运算。

广播(Broadcast)是NumPy中一种强大的机制,它允许numpy对不同形状(shape)的数组进行数值计算。这种计算通常在相应的元素上进行,但要求这些元素的维数相同且各维度的长度也相同。当维数或维度长度不匹配时,广播机制就会发挥作用,通过对形状较小的数组在横向或纵向上进行一定次数的重复(也称为“扩展”或“映射”),使其形状与较大的数组相匹配,从而进行元素级的算术运算。

广播规则详解

维度匹配

当两个数组的维度数不同时,NumPy会自动在维度数较少的数组前面补上长度为1的维度,直到两个数组的维度数相同。

例如,一个形状为(3,)的一维数组与一个形状为(1, 3)的二维数组进行运算时,一维数组会被视为(1, 3)的形状,以匹配二维数组的形状。

长度匹配

在进行广播时,如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为1,则NumPy会沿着这个维度对长度为1的数组进行扩展,直到其长度与另一个数组在该维度上的长度相同。

例如,一个形状为(1, 3)的数组与一个形状为(2, 3)的数组进行运算时,(1, 3)形状的数组会在第一个维度上被扩展为(2, 3),以匹配(2, 3)形状数组的形状。

不匹配情况

如果两个数组在某个维度上的长度既不相同也不为1,则无法进行广播,NumPy会抛出一个ValueError异常。

例如,一个形状为(2, 3)的数组无法与一个形状为(2, 4)的数组进行广播,因为它们在第二个维度上的长度不匹配,且没有一个数组在该维度上的长度为1。

案例4:广播失败

import numpy as np

# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 创建一个形状为 (2, 3) 的二维数组
arr2d_broadcast = np.array([[10, 20, 30], [40, 50, 60]])

# 尝试相加
try:
    result = arr2d + arr2d_broadcast
except ValueError as e:
    print(e)  # 输出: operands could not be broadcast together with shapes (3,3) (2,3)

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

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

相关文章

【LInux】Shell脚本编写基本语法

文章目录 一、前期准备1、查看本机bash2、编辑脚本 二、 判断结构1、if结构2、if/else结构3、if/elif/else结构4、case结构 三、循环结构1、for循环2、while循环3、until循环 四、谢谢观看! 一、前期准备 1、查看本机bash which bash之后编写脚本时,第…

数据同步工具Sqoop原理及场景优化

目录 0 数据同步策略 1 数据同步工具 ​编辑 2 Sqoop同步数据原理分析 2.1 原理分析 2.2 Sqoop基本使用分析 3 切片逻辑 3.1 MR切片逻辑 3.2 Hive CombineInputformat切片逻辑 3.3 实验1:Map任务并行度分析1 3.4 实验2: Map任务并行度分析2 3.5 实验3:Map任务并行…

C++ 类的基础用法与详细说明:简单易懂的入门指南

什么是类? C类_百度百科 类是C中一种用于封装数据和功能的基本结构。你可以将类视为一种自定义的数据类型,它可以包含数据(成员变量)和操作这些数据的函数(成员函数)。 创建一个简单的类 让我们通过一个…

Java爬虫:获取商品评论数据的高效工具

在电子商务的激烈竞争中,商品评论作为消费者购买决策的重要参考,对于商家来说具有极高的价值。它不仅能够帮助商家了解消费者的需求和反馈,还能作为改进产品和服务的依据。Java爬虫技术,以其稳健性和高效性,成为了获取…

Vue2的依赖注入(跨级通信)基本使用

provide(提供) &#xff0c;inject(注入) 祖先级组件用provide传递数据,它的所有后代都可以通过inject取到数据 使用演示&#xff1a; //祖先组件 <template><div>父组件传的值&#xff1a;{{num}} </div> </template><script> //导入子组件 i…

SourceMonitor,免费代码统计工具,覆盖率,圈复杂度,代码行

SourceMonitor是一款免费的代码度量工具&#xff0c;包含代码行&#xff0c;覆盖率&#xff08;无条件覆盖率&#xff09;&#xff0c;圈复杂度&#xff0c;函数调用深度等指标的测量。 用以下软件安装包&#xff0c;低版本的初始化工程会闪退&#xff0c;工具下载路径&#xf…

Python(numpy库)

numpy基础 NumPy 的全称是“ Numeric Python”&#xff0c;它是 Python 的第三方扩展包&#xff0c;主要用来计算、处理一维或多维数组 ndarray NumPy 定义了一个 n 维数组对象&#xff0c;简称 ndarray 对象&#xff0c;它是一个一系列相同类型元素组成的数组集合。数组中的…

h5页面与小程序页面互相跳转

小程序跳转h5页面 一个home页 /pages/home/home 一个含有点击事件的元素&#xff1a;<button type"primary" bind:tap"toWebView">点击跳转h5页面</button>toWebView(){ wx.navigateTo({ url: /pages/webview/webview }) } 一个webView页 /pa…

springboot二手交易平台

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

电脑上的顽固软件卸载不干净?试试这几款卸载工具,简单几步解决

相信大家日常的工作或学习生活中&#xff0c;都需要使用电脑&#xff0c;而为了完成工作&#xff0c;都会在电脑上安装一些工具。有时候不需要这些工具了&#xff0c;想要卸载时&#xff0c;发现有些软件太顽固了&#xff0c;卸载不掉&#xff0c;或者是卸载不干净。如果您也遇…

uniapp-uniapp + vue3 + pinia 搭建uniapp模板

使用技术 ⚡️uni-app, Vue3, Vite, pnpm &#x1f4e6; 组件自动化引入 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 &#x1f603; 各种图标集为你所用 &#x1f525; 使用 新的 <script setup> …

Excel功能区变灰是什么原因造成?怎么解决?

Microsoft Excel是广泛使用的电子表格软件&#xff0c;但有时用户可能会遇到功能区变灰的问题&#xff0c;这可能导致功能无法使用&#xff0c;影响工作效率和用户体验。本文将深入探讨Excel功能区灰色的原因及解决方案&#xff0c;帮助读者快速解决这一问题。 一、Excel功能区…

Polypyus部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.2、使用源码安装系统 2.2、使用方法2.2.1、命令行界面操作方法2.2.2、图形界面操作方法 3、测试用例4、参考文献总结 前言 本博客的主要内容为Polypyus的部署、使用与原理分析。本博文内容较长&…

【Linux】Linux之基础IO

我们先回顾一下C文件接口, #include <stdio.h> #include <string.h>int main() {FILE *fp fopen("myfile", "w");if (!fp){printf("fopen error!\n");}const char *msg "hello world!\n";int count 5;while (count--)…

DORA 机器人中间件学习教程(5)——3D激光雷达数据可视化

DORA中3D激光雷达数据可视化 1 总体思路2 DORA数据接收节点3 编写yml文件4 启动节点参考资料 截止目前 DORA还没有类似于ROS2中RVIZ这样的可视化工具&#xff0c;而在调试算法时我们又需要将数据进行可视化以验证代码的正确性。目前的解决方法是将DORA中的数据发送到ROS2中&…

SpringCloud Gateway保姆级入门教程

什么是微服务网关 SpringCloud Gateway是Spring全家桶中一个比较新的项目&#xff0c;Spring社区是这么介绍它的&#xff1a; 该项目借助Spring WebFlux的能力&#xff0c;打造了一个API网关。旨在提供一种简单而有效的方法来作为API服务的路由&#xff0c;并为它们提供各种增强…

深度学习:开启人工智能的新纪元

深度学习&#xff1a;开启人工智能的新纪元 深度学习是机器学习的一个子领域&#xff0c;它基于人工神经网络的学习算法&#xff0c;特别是那些具有多个非线性变换的层&#xff08;即“深度”&#xff09;。这些算法模仿人脑处理信息的方式&#xff0c;通过学习数据的多层次表…

Python Appium自动化操作抖音

1、功能介绍 使用Python和Appium给手机抖音上的同城模块自动评论&#xff0c;主要是通过模拟用户在抖音同城模块的操作&#xff0c;实现自动发送评论的功能。具体步骤如下&#xff1a; - 安装并配置好Python环境&#xff1b; - 安装Appium库&#xff0c;用于自动化操作手机应…

AI与测试行业调研

业务方向及应用场景 方向 技术 应用 大语言模型 私有化大模型&#xff1a; llama2 privateGPT 业务分析 测试数据生成 机器学习、深度学习应用 视觉自动化&#xff1a; FastbotApplitools 视觉自动化 缺陷预测与挖掘 知识图谱 neo4j 测试用例生成 精准测试 大语言模…

从A到Z,一文通览Python所有内置函数:编程效率提升100%

Python中的内置函数&#xff0c;这些函数覆盖了从基本数据处理到高级编程功能的各种用途。下面&#xff0c;将逐一介绍每个函数的用途和提供相应的代码示例。 A abs()&#xff1a;返回数字的绝对值。 print(abs(-5)) # 输出: 5 aiter()&#xff1a;返回异步迭代器。 async…