NumPy 基础用法详解

news2024/11/15 23:34:13

3e8739c53521472896bc7659ed9bdd91.jpg


 概要

NumPy(Numerical Python)是一个开源的Python库,用于进行科学计算和数据分析。它提供了一个多维数组(ndarray)对象,用于存储和处理大规模的数据集,以及各种用于操作这些数组的函数。NumPy是Python生态系统中最重要的科学计算库之一,广泛用于数据科学、机器学习、深度学习等领域。

NumPy的主要特点包括:

多维数组对象(ndarray):NumPy的核心数据结构是ndarray,它是一个类似于列表的多维数组,可以容纳相同类型的数据元素。这种数据结构允许高效地存储和操作大规模的数据。

广播(Broadcasting):NumPy允许在不同形状的数组之间执行数学运算,它会自动进行广播操作,使得数组维度不匹配的运算也能顺利进行。

快速的数学函数:NumPy提供了许多高效的数学函数,例如三角函数、指数和对数函数、统计函数、线性代数运算等。

索引和切片:与Python列表类似,NumPy的数组也可以通过索引和切片来访问和修改元素,但它支持多维数组的索引和切片操作。

通用函数(ufunc):NumPy的通用函数是对数组中的元素进行逐元素操作的函数,能够在整个数组上进行快速的元素级计算。

整合其他语言:NumPy为Python提供了一个接口来与C、C++和Fortran等语言进行交互,这样可以在Python中调用这些语言的库函数,提高性能。

由于NumPy提供了高效的数组操作和数学函数,使得Python在科学计算和数据处理领域变得更加强大和高效。它也为众多其他Python数据科学库如SciPy、Pandas、Matplotlib等提供了基础支持,成为Python数据科学生态系统的重要组成部分。

基本用法

NumPy的基本用法主要涉及创建ndarray数组、对数组进行操作和数学计算。下面简要介绍一些NumPy的基本用法:

导入NumPy库: 在开始使用NumPy之前,需要先导入NumPy库,通常使用import语句将其引入到Python代码中:

import numpy as np

在上述代码中,我们将NumPy库导入,并给它取了一个别名np,这是一种常用的做法。

1、创建ndarray数组: 可以使用np.array()函数来创建ndarray数组。数组可以是一维、二维或多维的。以下是一些创建数组的示例:

# 一维数组
arr1 = np.array([1, 2, 3, 4, 5])

# 二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

# 生成一个由0组成的三维数组(3x3x3)
arr3 = np.zeros((3, 3, 3))

# 生成一个由1组成的二维数组(2x4)
arr4 = np.ones((2, 4))

# 生成一个线性序列的数组(从0到9)
arr5 = np.arange(10)

# 生成一个均匀间隔的数组(从0到1,共5个元素)
arr6 = np.linspace(0, 1, 5)

2、数组运算: NumPy支持对数组进行逐元素的数学运算,包括加减乘除、幂运算、三角函数等。这些运算可以使用通用函数(ufunc)来实现,它们会在整个数组上进行快速的元素级计算:

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 数组加法
result_add = arr1 + arr2

# 数组乘法
result_mul = arr1 * arr2

# 数组幂运算
result_pow = arr1 ** 2

# 数组三角函数
result_sin = np.sin(arr1)

3、数组索引和切片: 可以像Python列表一样对ndarray进行索引和切片操作:

arr = np.array([10, 20, 30, 40, 50])

# 索引
print(arr[0])  # 输出: 10

# 切片
print(arr[1:4])  # 输出: [20 30]

4、数组形状操作 可以通过reshape()函数改变数组的形状,或使用shape属性查看数组的形状

arr = np.arange(9)

# 改变数组形状为3x3
reshaped_arr = arr.reshape(3, 3)

# 查看数组形状
print(reshaped_arr.shape)  # 输出: (3, 3)

这只是NumPy的基础用法,NumPy还提供了许多其他功能和方法,如广播、聚合函数、排序、文件输入/输出等,可以在NumPy官方文档和教程中进一步学习

进阶用法

NumPy的高级用法涉及更复杂和高级的数据处理、数学运算和性能优化等方面。以下是一些高级用法的示例:

1 广播(Broadcasting): 广播是NumPy中的一项强大功能,它允许在不同形状的数组之间执行数学运算,使得维度不匹配的操作也能自动执行。广播可以大大简化代码,提高代码的可读性和效率。

a = np.array([1, 2, 3])
b = np.array([10, 20, 30])

# 广播机制会自动将b扩展为与a相同的形状,然后执行加法
result = a + b
print(result)  # 输出: [11 22 33]

2 聚合函数: NumPy提供了许多聚合函数,用于对数组进行汇总计算,例如求和、平均值、最大值、最小值等。这些函数能够在整个数组上进行操作,返回一个标量值或沿指定轴进行操作。

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

# 对整个数组求和
sum_all = np.sum(arr)

# 沿行求和
sum_axis0 = np.sum(arr, axis=0)

# 沿列求和
sum_axis1 = np.sum(arr, axis=1)

2布尔索引: 布尔索引是一种通过布尔条件来获取数组中元素的方法。它允许根据条件从数组中选择和过滤元素,非常有用于数据筛选和过滤。

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

# 使用布尔条件获取满足条件的元素
filtered_arr = arr[arr > 2]
print(filtered_arr)  # 输出: [3 4 5]

高级索引:NumPy支持整数数组和布尔数组作为索引,以实现更复杂的索引操作。

arr = np.array([10, 20, 30, 40, 50])

# 使用整数数组进行索引
index = np.array([1, 3])
selected_elements = arr[index]
print(selected_elements)  # 输出: [20 40]

# 使用布尔数组进行索引
bool_index = arr > 30
selected_elements = arr[bool_index]
print(selected_elements)  # 输出: [40 50]

数组操作与优化:NumPy提供了许多数组操作函数,如合并数组、拆分数组、转置数组等。此外,对于大规模数据集,可以使用NumPy中的一些技巧来优化代码的性能,如避免循环、使用向量化操作等。

以上只是NumPy的一些高级用法示例。NumPy是一个功能强大的库,深入学习它可以帮助你更好地进行数据处理、科学计算和数学运算。你可以查阅NumPy的官方文档和其他高级教程,进一步了解更多高级用法和技巧

 

欢迎点赞收藏转发,感谢🙏

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

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

相关文章

PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案

PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 Redis扩展方法和PHP连接Redis的多种方案 一、Redis扩展方法二、php操作Redis语…

llama2.c - 垂直领域LLM训练/推理全栈利器

llama2.c是一个极简的Llama 2 LLM全栈工具,非常适合用于制作面向细分市场垂直领域的大规模语言模型。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、简介 使用此存储库中的代码,你可以在 PyTorch 中从头开始训练 Llama 2 LLM 架构&#xf…

Linux文件系统中目录介绍

linux的文件系统: 根文件系统(rootfs):fhs:文件系统目录标准 Filesystem Hierarchy Standard /boot:引导文件的存放目录:内核文件、引导加载文件都存放在此目录 /bin:共所有用户使用的基本命令,不能管理至…

葡萄酒质量预测 -- 机器学习项目基础篇(1)

在这里,我们将根据给定的特征预测葡萄酒的质量。我们使用互联网上免费提供的葡萄酒质量数据集。该数据集具有影响葡萄酒质量的基本特征。通过使用几种机器学习模型,我们将预测葡萄酒的质量。 导入库和数据集 Pandas是一个有用的数据处理库。用于处理数…

【Linux】带你深入理解文件系统

目录 文件系统 背景知识 磁盘结构 磁盘的存储结构 磁盘抽象(逻辑,虚拟)结构 BootBlock: Super block Data blocks inode Table BlcokBitmap inode Bitmap Group Descriptor Table 文件名和inode编号 硬链接和软链接 软链接 硬链接 取消…

Python的threading模块

为引入多线程的概念&#xff0c;下面是一个例子&#xff1a; import time, datetimestartTime datetime.datetime(2024, 1, 1, 0, 0, 0) while datetime.datetime.now() < startTime:time.sleep(1)print(Program now starting on NewYear2024) 在等待time.sleep()的循环调…

【Unity2D】Order in Layer 与Layer的区别

Order in Layer 是Unity 图形渲染的顺序&#xff0c;通过设置Order in Layer &#xff0c;可以设置同层(Layer)的物体出现顺序&#xff0c;可以默认使一种物体出现在另一种物体前方 设置一物体默认在其他物体之上不被遮挡 Layer是Unity中物体的层级&#xff0c;不同物体可以位…

vue2项目中使用svg图标

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后&#xff0c;页面上加载的不再是图片资源, 这对页面性能来说是个很大的提升&#xff0c;而且我们SVG文件比img要小的很多&#xff0c;放在项目中几乎不占用资源。 1、安装SVG依赖插件并配置加载器和路径 npm instal…

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录&#xff1a;「简历必备」前后端实战项目&#xff08;推荐&#xff1a;⭐️⭐️⭐️⭐️…

HDFS中namenode安全模式

HDFS中namenode安全模式 安全模式的现象探究step1step2step3step4 安全模式的概述控制进入时间和离开条件安全模式自动进入离开安全模式手动进入离开 安全模式的现象探究 step1 HDFS集群在停机状态下&#xff0c;使用hdfs -daemon命令逐个进程启动集群&#xff0c;观察现象首…

网站密码忘记了怎么办?chrome浏览器,谷歌浏览器。

有时候忘记了网站的密码&#xff0c;又不想“忘记密码”去一番折腾。如果你正好用的是 chrome 浏览器。 那么根本就没必要折腾&#xff0c;直接就能看到网站密码。 操作如下 1.在浏览器右上角点击三个小点&#xff1a; 2.点这三个点&#xff1a; 3.选择“显示密码”&#x…

Windows 10 中无法最大化任务栏中的程序

方法1&#xff1a;仅选择选项 PC 屏幕 如果您使用双显示器&#xff0c;有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下&#xff0c;因此您看不到任何选项。因此&#xff0c;请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…

数字信号处理中的基本运算——累加运算

1. 累加原理 s a0 a1 a2 a3 ... a(L-1) 构成一个累加结果的输入数据为一帧数据&#xff0c;一帧数据所包含的数据个数为帧长度。 累加器的工作原理是&#xff1a;每帧数据周期性地流动&#xff0c;新的数据不断进入累加器与反馈支路相加&#xff0c;实现累加&#xff…

系统集成|第七章(笔记)

目录 第七章 范围管理7.1 项目范围管理概念7.2 主要过程7.2.1 规划范围管理7.2.2 收集需求7.2.3 定义范围7.2.4 创建工作分解结构 - WBS7.2.5 范围确认7.2.6 范围控制 上篇&#xff1a;第六章、整体管理 第七章 范围管理 7.1 项目范围管理概念 概述&#xff1a;项目范围管理就…

安装vite-plugin-svg-icons

找不到合适的图标&#xff0c;如何使用其他的svg图标&#xff1f; 安装vite-plugin-svg-icons 使用svg-icon&#xff0c;即可使用iconfont等svg图标库 安装及使用过程 一、安装依赖二、在main.js中导入文件三、在src/assets新建svg目录四、vite.config.js中进行配置五、在compo…

串口设备驱动

文章目录 一、串口简介二、Linux下串口驱动框架uart_driver 结构体uart_port 的添加与移除三、Linux下串口驱动工作流程四、Linux下串口应用开发终端工作模式多线程例程一、串口简介 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线…

【PCIE】completion timeout disable功能总结

在PCI Express&#xff08;PCIe&#xff09;总线上进行I/O数据交换时&#xff0c;会使用Transaction layer packets&#xff08;TLP&#xff09;来将数据从一个端点传输到另一个端点。当发生一些错误或异常情况时&#xff0c;可能会导致一个TLP包没有被正常处理&#xff0c;从而…

BOB_1.0.1靶机详解

BOB_1.0.1靶机详解 靶机下载地址&#xff1a;https://download.vulnhub.com/bob/Bob_v1.0.1.ova 这个靶机是一个相对简单的靶机&#xff0c;很快就打完了。 找到ip地址后对IP进行一个单独的扫描&#xff0c;发现ssh端口被改到25468了&#xff0c;等会儿登陆时候需要用到。 目…

砖墙(力扣)Map + 思维 JAVA

你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同&#xff08;也就是一个单位高&#xff09;但是宽度不同。每一行砖块的宽度之和相等。 你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过&#xff0c;就不算穿过这块砖。你…

无涯教程-jQuery - Puff方法函数

吹气效果可以与show/hide/toggle一起使用。通过按比例放大元素并同时隐藏它&#xff0c;可以形成粉扑效果。 Puff - 语法 selector.hide|show|toggle( "puff", {arguments}, speed ); 这是所有参数的描述- model - 效果的模式。可以是"显…