Numpy基本操作

news2024/11/30 7:46:50

在这里插入图片描述

1.什么是Numpy

  NumPy 是一个用于 Python 编程语言的开源库,它的主要功能是支持大型多维数组和矩阵,并提供了大量的数学函数来操作这些数组。NumPy 是 Python 科学计算生态系统的核心组成部分之一,广泛应用于数据分析、科学计算、机器学习等领域。

主要特点:
  高性能数组操作:NumPy 提供了一种高效的多维数组对象,以及用于对其进行操作的函数。这些数组在内存中是连续的,因此可以高效地进行访问和操作。
  广播功能:NumPy 支持数组间的广播操作,即使数组的形状不完全匹配也能执行数学运算。
  矢量化操作:通过矢量化操作,NumPy 可以对整个数组进行操作而无需显式地使用循环,从而极大地提高了代码的执行效率。
  内置数学函数:NumPy 包含了大量的数学函数,如四则运算、三角函数、指数和对数函数等。
  线性代数运算:包括矩阵乘法、求逆、特征值分解等线性代数运算。
  随机数生成:提供了生成各种分布的随机数的功能。
  集成性:NumPy 可以很好地与其他 Python 库集成,如 SciPy、Pandas 和 Matplotlib 等。

The fundamental package for scientific computing with Python --Numpy官方描述
https://numpy.org/ --官网

2.安装

pip install numpy

3.Numpy创建数组

  在Python中使用NumPy库可以非常方便地创建不同维度的数组。下面我将展示如何创建一维、二维和三维的NumPy数组。

3.1.创建一维数组

  一维数组可以看作是一个简单的列表。

import numpy as np

# 使用列表创建一维数组
arr_1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr_1d)

3.2.创建二维数组

  二维数组通常用于表示矩阵。

# 使用嵌套列表创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("二维数组:\n", arr_2d)

3.3.创建三维数组

  三维数组可以看作是多个二维矩阵堆叠在一起。

# 使用嵌套列表创建三维数组
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三维数组:\n", arr_3d)

4.Numpy创建填充矩阵

4.1.全零矩阵

  在 NumPy 中创建一个全零矩阵非常简单,你可以使用 numpy.zeros() 函数。这个函数允许你指定矩阵的形状,并返回一个由零组成的数组。

  下面是一些示例代码,展示如何创建不同维度的全零矩阵:

import numpy as np

# 创建一个一维全零数组
zero_1d = np.zeros(5)
print("一维全零数组:", zero_1d)

# 创建一个二维全零矩阵
zero_2d = np.zeros((3, 4))
print("二维全零矩阵:\n", zero_2d)

# 创建一个三维全零矩阵
zero_3d = np.zeros((2, 3, 2))
print("三维全零矩阵:\n", zero_3d)

  这里,np.zeros() 函数的第一个参数是一个表示数组形状的元组。对于一维数组,只需要提供一个整数;对于二维或更高维的数组,则需要提供一个包含各个维度长度的元组。

4.2.创建单值填充矩阵

  在 NumPy 中创建一个填充有相同值的矩阵可以使用 numpy.full() 函数。这个函数接受一个形状参数和一个填充值参数,返回一个具有指定形状且所有元素都为给定值的数组。

  下面是创建不同维度的单值矩阵的示例代码:

import numpy as np

# 创建一个一维单值数组
single_value_1d = np.full(5, 7)
print("一维单值数组:", single_value_1d)

# 创建一个二维单值矩阵
single_value_2d = np.full((3, 4), 7)
print("二维单值矩阵:\n", single_value_2d)

# 创建一个三维单值矩阵
single_value_3d = np.full((2, 3, 2), 7)
print("三维单值矩阵:\n", single_value_3d)

5.Numpy对比List

  NumPy 数组与 Python 原生 list 在性能上有显著的不同,特别是在科学计算和大规模数据处理方面。以下是两者之间的一些关键区别和性能比较:

5.1.内存占用

  • NumPy 数组 通常比等效的 Python 列表占用更少的内存。这是因为 NumPy 数组中的元素都是同一种数据类型,而 Python 列表中的元素可以是任何类型,这会引入额外的开销。
  • NumPy 数组的内存布局更加紧凑,减少了数据访问的时间。

5.2.计算速度

  • NumPy 数组 在执行数学运算时通常比 Python 列表快得多。这是因为它利用了底层的 C 语言实现来进行高效的向量化操作,避免了 Python 的解释器开销。
  • NumPy 提供了诸如广播(broadcasting)这样的特性,可以在不需要显式循环的情况下执行复杂的数学运算,这大大提高了效率。

5.3.索引和切片

  • 对于索引和切片操作,NumPy 数组通常比 Python 列表更快。NumPy 的索引机制被优化过,可以快速访问数据。

5.4.元素增删

  • Python 列表 在增删元素方面通常比 NumPy 数组表现更好。这是因为列表是动态调整大小的数据结构,而 NumPy 数组的大小一旦创建后通常是固定的。如果需要改变大小,整个数组可能需要重新分配内存,这可能会导致性能下降。

5.5.示例代码

  下面是一个简单的示例来比较 NumPy 数组和 Python 列表在执行加法运算时的速度差异:

import numpy as np
import time

size_of_vec = 1000000

def pure_python_version():
    t1 = time.time()
    X = range(size_of_vec)
    Y = range(size_of_vec)
    Z = [X[i] + Y[i] for i in range(len(X))]
    return time.time() - t1

def numpy_version():
    t1 = time.time()
    X = np.arange(size_of_vec)
    Y = np.arange(size_of_vec)
    Z = X + Y
    return time.time() - t1

t1 = pure_python_version()
t2 = numpy_version()
print(t1, t2)
print("NumPy is in this example {} times faster!".format(t1/t2))

  总结来说,如果你需要高效地处理数值型数据并执行数学运算,那么使用 NumPy 数组会是一个很好的选择。而对于那些需要频繁修改大小或进行复杂数据结构操作的任务,则 Python 列表可能更适合。

6.Numpy切片

  在 NumPy 中,切片是一种非常强大的功能,允许你从数组中选择特定的元素或子集。切片语法类似于 Python 的列表切片语法,但因为 NumPy 数组可以有多维,所以切片也可以应用于多维数组。

6.1.一维数组的切片

  对于一维数组,你可以使用类似于 Python 列表的切片语法:

import numpy as np

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

# 选择第3到第6个元素(索引2到5)
slice1 = arr[2:6]
print("Slice from index 2 to 5:", slice1)

# 选择所有元素,步长为2
slice2 = arr[::2]
print("Every second element:", slice2)

# 选择所有元素,从最后一个开始,步长为-1
slice3 = arr[::-1]
print("Reverse the array:", slice3)

6.2.多维数组的切片

  对于多维数组,你可以在每个维度上指定切片:

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

# 选择第一行
row1 = arr2d[0, :]
print("First row:", row1)

# 选择第一列
col1 = arr2d[:, 0]
print("First column:", col1)

# 选择第1和第3行的第2列
rows1and3_col2 = arr2d[[0, 2], 1]
print("Element at (0, 1) and (2, 1):", rows1and3_col2)

# 选择中间两行的中间两列
middle_rows_cols = arr2d[1:3, 1:3]
print("Middle 2x2 subarray:\n", middle_rows_cols)

6.3.进阶切片

  除了标准的切片操作外,NumPy 还支持更复杂的切片方式,比如布尔索引和整数索引。

布尔索引

使用布尔数组来索引另一个数组。

# 选择所有大于5的元素
mask = arr > 5
selected_elements = arr[mask]
print("Elements greater than 5:", selected_elements)
整数索引

  使用整数数组来索引另一个数组。

# 选择特定位置的元素
indices = np.array([1, 3, 5])
selected_elements = arr[indices]
print("Selected elements by indices:", selected_elements)

6.4.注意事项

  • 如果没有指定起始或结束索引,则默认从开头或到结尾。
  • 步长可以是负数,这将反向遍历数组。

  这些就是 NumPy 中切片的基本用法。切片操作对于数据处理和分析非常重要,能够让你以简洁的方式提取所需的数据部分。

7.结语

  Numpy是一个强大的数组、矩阵处理工具,可以作为机器学习算法的前置数据生成或处理工具。

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

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

相关文章

海运专线面对的难题主要有哪些?突破口在哪里?

随着跨境电商的不断发展,跨境海运收益增加的同时,也面临着不少难题。 一、高昂的运输成本 由于跨境运输涉及多个国家和地区的多个运输环节,包括起运国、中转国和目的国,因此运输费用、中转费用、保险费用等都会累加,…

视频编辑与制作软件哪个好 视频编辑与制作软件哪个好学

学习剪辑技术,就是在学视频编辑软件的用法。选择一款适合自己的视频编辑与制作软件,能让你少走很多弯路。优秀的视频编辑软件,不仅能让用户快速掌握视频编辑的基本操作,还可以激发用户的创作灵感。有关视频编辑与制作软件哪个好&a…

【Qt】 编辑框 | 按钮 | 坐标系 的 初步了解

文章目录 1. 编辑框图形化方式纯代码方式 2. 按钮图形化方式 3. 坐标系 1. 编辑框 这里以实现 hello world 为例 即 使用 编辑框 完成 Hello World 图形化方式 单行编辑框 QLineEdit 多行编辑框 QTextEdit 点击 widget.ui 并打开 调用 Qt designer 这个图形化工具 完成窗口…

生信分析入门:从基础知识到实践操作的全方位指南

随着生物学研究的数字化转型,生物信息学(简称生信)分析已经成为现代生命科学研究中的关键工具。对于刚开始接触生信分析的初学者来说,这个领域可能看起来复杂而陌生。然而,通过系统的学习和实践,生信分析可…

ISO 26262中的失效率计算:IEC 61709-Clause16_Relays

目录 概要 1 元器件分类和基准温度 2 失效率的计算 2.1 失效率预测模型 2.2 电应力系数 2.2.1 电应力区域划分 2.2.2 电应力系数选择 2.3 转换率系数 2.3.1 转换率系数计算 2.4 温度应力系数 2.4.1 温度应力系数计算模型 2.4.2 温度应力系数计算 概要 IEC 61709是…

百元蓝牙耳机哪一款好用?四款价格亲民高性价比耳机产品推荐

如果说当代最伟大的音频设备创新,蓝牙耳机绝对算得上是一款既便捷又实用的科技神器。它不需要繁琐的线路连接,只需要轻轻一戴,就能让你随时随地沉浸在高质量的音乐或通话体验中。最重要的是,它的无线设计让我们的生活更加自由无拘…

Opencv-C++笔记 (20) : 距离变换与分水岭的图像分割

文章目录 一、图片分割分水岭算法理解分水岭算法过程 二、距离变换与分水岭距离变换常见算法有两种分水岭变换常见的算法步骤 主要函数c代码四、结果展示 一、图片分割 图像分割(Image Segmentation)是图像处理最重要的处理手段之一 图像分割的目标是将图像中像素根据一定的规则…

linux定时自启动shell脚本

linux定时自启动shell脚本 前言操作问题 前言 需要设计一个脚本用来定时清理linux磁盘空间,自启动 操作 1.在指定目录编写shell脚本 给脚本加权限 chmod 755 origin_del.sh 或者 chmod x origin_del.sh 2.打开定时 执行 crontab -e 输入 0 0 * * * /home/o…

【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘

初见ROG NUC,你或许会为它的小巧体型惊讶。然而,这看似不起眼的机身内,蕴藏着游戏、创意的强大能量。 掌中风暴,性能无界 ROG NUC搭载英特尔高性能处理器,配合高速NVMe SSD固态硬盘以及可选的高端独立显卡&#xff08…

电子工程师必备:万用表测量电阻的正确方法

在电子学和电气工程领域,测量电阻是一项基本技能。无论是进行电路调试还是故障排除,了解如何使用万用表测量电阻都是至关重要的。下面就跟着道合顺来一起了解#万用表测量电阻的详细方法#指南。 一、理解电阻与万用表 什么是电阻? 电阻是导…

【python数据分析11】——Pandas统计分析(分组聚合进行组内计算)

分组聚合进行组内计算 前言1、groupby方法拆分数据2、agg方法聚合数据3、apply方法聚合数据4、transform方法聚合数据5 小案例5.1 按照时间对菜品订单详情表进行拆分5.2 使用agg方法计算5.3 使用apply方法统计单日菜品销售数目 前言 依据某个或者几个字段对数据集进行分组&…

Linux驱动开发基础(匹配详解)

所学来自百问网 目录 1. 简介 2. 函数路径 3. driver_override 4. 设备树匹配 5. id_table 6. name 7. 比较顺序 1. 简介 platform_device 与 platform_driver是挂载在platform_bus_type总线下的两条链表,通过分离的思想负责不同的功能实现,两者…

AMD巨资收购ZT Systems,加速AI芯片市场竞争

AMD大手笔收购,剑指AI芯片市场 AMD近期宣布了一项重大收购计划,将以49亿美元的价格收购服务器制造商ZT Systems。这是AMD自2022年收购Xilinx以来最大规模的一笔交易,旨在通过扩大AI芯片和硬件产品组合,进一步增强与英伟达在AI领域…

KEIL微库MicroLIB与程序大小

不使用微库MicroLIB Program Size: Code23010 RO-data16190 RW-data1076 ZI-data21412 使用微库 Program Size: Code17356 RO-data15636 RW-data1076 ZI-data20804 Code: -5654 字节RO-data :-554 字节RW-data :0 字节(没有变化&…

【案例51】内存溢出分析实战

一、问题现象 在使用 NC 过程中发现,系统时不时就不可用,一直在转圈。 通过浏览器访问系统时,页面长时间无法加载。 二、环境信息 系统为 NC 单点环境,在线人数为 30 人左右。 JDK版本如图也是正常的。 三、问题分析 在发现…

【系统架构设计师-2018年】案例分析-答案及详解

试题一(25分) 阅读以下关于软件系统设计的叙述,在答题纸上回答问题1至问题3。 【说明】 某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设…

pycharm汉化与插件下载无效解决

下载语言插件 装载语言插件 重启后界面转为中文

QT中鼠标事件示例(包含点击,点击之后移动,释放的坐标获取)

QT中的鼠标事件 简介:结果展示:实例代码: 简介: 在Qt中,处理鼠标事件是图形用户界面(GUI)编程中的一个重要方面。Qt通过一系列的事件处理函数来支持鼠标事件的响应。这些事件包括鼠标点击&…

鹤岗房全国蔓延,现在要不要买房?

文|琥珀食酒社 作者 | 积溪 房子卖白菜价、人人都能买得起的时代 真的要来了 以前啊你花2万块钱 在大城市买不到一个厕所 可现在只要几万块你就能买一整套房 还带装修和家电 而且这样的房子还很多 “鹤岗”房已经在全国快速蔓延 那对咱普通人来说到底是好…

Linux入门——02文件与权限

1.文件 文件的创建,是在磁盘上创建(外存与内存:内存掉电已失性)空文件要占外盘内存(文件的属性是数据 ,文件 文件内容数据 文件属性数据)操作文件的方法(1.操作文件内容 2.操作文…