当前位置: 首页 > news >正文

NumPy 库的基本运用

NumPy 库基本运用指南:从入门到实践

在数据科学、机器学习和科学计算的领域中,NumPy 库无疑是一个不可或缺的工具。它为 Python 提供了高效的多维数组操作能力,以及丰富的数学函数库,让数据处理变得更加便捷和高效。今天,我们就来一起探索 NumPy 库的基本运用。

安装 NumPy

在开始使用 NumPy 之前,我们需要先安装它。如果你使用的是 pip 包管理器,只需在命令行中输入以下命令:

pip install numpy

等待安装完成后,我们就可以在 Python 代码中导入 NumPy 库了,通常我们会给它取一个别名 np,方便后续使用:

import numpy as np

NumPy 数组的创建

NumPy 的核心是数组(ndarray),它是一个多维的数组对象。与 Python 内置的列表相比,NumPy 数组具有更高的运算效率和更丰富的操作方法。

从列表创建数组

我们可以通过np.array()函数将 Python 列表转换为 NumPy 数组。例如:

# 创建一维数组

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

print(arr1) # 输出:[1 2 3 4 5]

# 创建二维数组

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

print(arr2)

# 输出:

# [[1 2 3]

# [4 5 6]]

利用函数创建特殊数组

除了从列表创建,NumPy 还提供了一些函数来创建具有特定规律的数组。

np.zeros():创建全为 0 的数组。

zeros_arr = np.zeros((2, 3)) # 创建一个2行3列的全0数组print(zeros_arr)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]]

np.ones():创建全为 1 的数组。

ones_arr = np.ones((3, 2)) # 创建一个3行2列的全1数组
print(ones_arr)
# 输出:
# [[1. 1.]
# [1. 1.]
# [1. 1.]]
np.arange():类似于 Python 的 range 函数,创建一个等差数组。
arange_arr = np.arange(1, 10, 2) # 从1开始,到10结束(不包含10),步长为2print(arange_arr) # 输出:[1 3 5 7 9]

np.linspace():创建一个在指定范围内均匀分布的数组。

linspace_arr = np.linspace(0, 1, 5) # 从0到1,生成5个均匀分布的数
print(linspace_arr) # 输出:[0. 0.25 0.5 0.75 1. ]

数组的属性

了解数组的属性有助于我们更好地操作数组,NumPy 数组有一些常用的属性:

ndim:返回数组的维度。

print(arr1.ndim) # 输出:1(一维数组)
print(arr2.ndim) # 输出:2(二维数组)

shape:返回一个元组,表示数组各维度的大小。

print(arr1.shape) # 输出:(5,)(一维数组有5个元素)
print(arr2.shape) # 输出:(2, 3)(二维数组有2行3列)

size:返回数组中元素的总个数。

print(arr1.size) # 输出:5
print(arr2.size) # 输出:6

dtype:返回数组中元素的数据类型。

print(arr1.dtype) # 输出:int64(默认整数类型)

数组的索引和切片

与 Python 列表类似,NumPy 数组也支持索引和切片操作,通过这些操作我们可以获取数组中的特定元素或子数组。

一维数组的索引和切片

对于一维数组,索引和切片的使用方法与列表基本相同:

arr = np.arange(10)
print(arr[3]) # 输出:3(获取索引为3的元素)
print(arr[2:5]) # 输出:[2 3 4](获取从索引2到4的元素,不包含5)
print(arr[:6]) # 输出:[0 1 2 3 4 5](获取从开头到索引5的元素)
print(arr[4:]) # 输出:[4 5 6 7 8 9](获取从索引4到结尾的元素)
print(arr[::2]) # 输出:[0 2 4 6 8](步长为2,获取元素)

二维数组的索引和切片

二维数组的索引和切片相对复杂一些,需要指定行和列的索引:

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[1, 2]) # 输出:6(获取第2行第3列的元素,行和列索引均从0开始)
print(arr[0:2, 1:3]) # 输出:[[2 3] [5 6]](获取第1-2行,第2-3列的子数组)
print(arr[:, 1]) # 输出:[2 5 8](获取所有行的第2列元素)print(arr[1, :]) # 输出:[4 5 6](获取第2行的所有元素)

数组的基本运算

NumPy 数组支持各种算术运算,这些运算都是对数组中的元素逐个进行的,大大提高了运算效率。

元素级运算

arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
# 加法
print(arr1 + arr2) # 输出:[ 6 8 10 12]
# 减法
print(arr1 - arr2) # 输出:[-4 -4 -4 -4]
# 乘法
print(arr1 * arr2) # 输出:[ 5 12 21 32]# 除法
print(arr1 / arr2) # 输出:[0.2 0.33333333 0.42857143 0.5]
# 平方
print(arr1 **2) # 输出:[ 1 4 9 16]

与标量的运算

数组还可以与标量进行运算,运算结果是数组中的每个元素都与该标量进行运算:

arr = np.array([1, 2, 3, 4])
print(arr + 2) # 输出:[3 4 5 6]
print(arr * 3) # 输出:[ 3 6 9 12]
print(arr / 2) # 输出:[0.5 1. 1.5 2. ]

矩阵乘法

如果需要进行矩阵乘法(不是元素级乘法),可以使用np.dot()函数或@运算符:

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 使用np.dot()函数
print(np.dot(arr1, arr2))
# 输出:
# [[19 22]
# [43 50]]
# 使用@运算符
print(arr1 @ arr2)
# 输出:
# [[19 22]
# [43 50]]

常用的统计函数

NumPy 提供了许多实用的统计函数,用于对数组进行统计分析。

np.mean():计算数组的平均值。

arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr)) # 输出:3.0

np.sum():计算数组元素的总和。

arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr)) # 输出:15

np.max():找出数组中的最大值。

arr = np.array([1, 5, 3, 8, 2])
print(np.max(arr)) # 输出:8

np.min():找出数组中的最小值。

arr = np.array([1, 5, 3, 8, 2])
print(np.min(arr)) # 输出:1

np.std():计算数组的标准差。

arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 输出:1.4142135623730951

np.var():计算数组的方差。

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

print(np.var(arr)) # 输出:2.0

以上就是 NumPy 库的一些基本运用,掌握这些内容可以帮助我们完成很多常见的数据处理任务。当然,NumPy 的功能远不止这些,还有更多高级的特性和函数等待我们去探索。

http://www.lryc.cn/news/594251.html

相关文章:

  • 服务器上的文件复制到本地 Windows 系统
  • 语音识别技术:从声音到文字的 AI 魔法
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • #SVA语法滴水穿石# (014)关于链式蕴含的陷阱
  • 【Linux】1. Linux操作系统介绍及环境搭建
  • golang踩坑之url不会decode问题
  • 深度学习图像分类数据集—八种贝类海鲜食物分类
  • 秒赤Haproxy配置算法
  • 【RK3576】【Android14】显示屏MIPI开发调试
  • 2025.7.20总结-实战演讲
  • 上海生物医药战略入主康华生物,康华生物开启高质量发展新篇章
  • Agentic-R1 与 Dual-Strategy Reasoning
  • 7.19-7.20 Java基础 | File类 I/O流学习笔记
  • 阶段1--Linux中的计划任务
  • VUE2 学习笔记2 数据绑定、数据代理、MVVM
  • AI开发 | 基于FastAPI+React的流式对话
  • 智能驾驶整体技术架构详解
  • Spring Boot总结
  • MPLS-LDP
  • Java 大视界 -- Java 大数据在智能教育在线学习平台用户活跃度提升与留存策略研究中的应用(354)
  • HarmonyOS 网络请求优化实战指南:从0到1写出流畅不卡顿的应用!
  • python doipclient库
  • Spark专栏开篇:它从何而来,为何而生,凭何而强?
  • 事务的传播行为,分别在spring和mysql中讲解
  • 神经网络:卷积层
  • 反欺诈业务 Elasticsearch 分页与导出问题分析及解决方案
  • 子查询转连接查询