深入理解 NumPy:Python 科学计算的基石

在数据科学、人工智能和科学计算的世界里,NumPy 是一块绕不过去的基石。它是 Python 语言中用于高性能科学计算的基础包,几乎所有的数据分析与机器学习框架(如 Pandas、TensorFlow、Scikit-learn)都离不开它的支持。

一、什么是 NumPy?

NumPy(Numerical Python)是一个开源的 Python 库,主要用于支持大型多维数组与矩阵运算,同时提供了大量的数学函数库用于对这些数组进行操作。其核心数据结构是 ndarray,一个多维数组对象。

NumPy 的优势:

  • 更高效的数据存储与计算性能

  • 支持广播(broadcasting)机制

  • 丰富的线性代数、傅里叶变换与随机数生成工具

  • 与 C、C++ 和 Fortran 的接口优秀,支持底层扩展


二、NumPy 安装

安装 NumPy 最简单的方法是使用 pip 或 conda:

pip install numpy
# 或者使用 Anaconda
conda install numpy

安装完成后可以这样导入:

import numpy as np

三、NumPy 核心数据结构:ndarray

1. 创建 ndarray

import numpy as npa = np.array([1, 2, 3])               # 一维数组
b = np.array([[1, 2], [3, 4]])        # 二维数组
c = np.zeros((2, 3))                  # 全 0 数组
d = np.ones((2, 3))                   # 全 1 数组
e = np.eye(3)                         # 单位矩阵
f = np.arange(0, 10, 2)               # 生成等差序列
g = np.linspace(0, 1, 5)              # 生成等距分布的数

2. 数组属性

print(a.shape)      # 数组维度
print(a.ndim)       # 维数
print(a.dtype)      # 元素类型
print(a.size)       # 元素个数

四、数组操作

1. 数组索引与切片

arr = np.array([[1, 2, 3], [4, 5, 6]])print(arr[0, 2])       # 获取第一行第三列的元素
print(arr[:, 1])       # 获取所有行的第二列
print(arr[1, :2])      # 获取第二行的前两列

2. 数组形状变换

a = np.arange(6)           # [0, 1, 2, 3, 4, 5]
a = a.reshape((2, 3))      # 转换为 2 行 3 列
a.T                        # 转置
a.flatten()                # 展平成一维

3. 数组合并与拆分

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 合并
np.vstack((a, b))          # 竖直堆叠
np.hstack((a, a))          # 水平堆叠# 拆分
np.split(a, 2, axis=0)     # 沿第 0 轴拆分

五、广播机制(Broadcasting)

NumPy 可以让不同形状的数组在一起执行运算,前提是它们遵循广播规则:

a = np.array([1, 2, 3])
b = 2
print(a + b)      # 输出:[3, 4, 5]A = np.ones((2, 3))
B = np.array([1, 2, 3])
print(A + B)      # 每一行加上 [1, 2, 3]

六、常用函数

1. 数学函数

a = np.array([1, 2, 3])np.sqrt(a)
np.exp(a)
np.log(a)
np.sin(a)

2. 聚合函数

a = np.array([[1, 2], [3, 4]])np.sum(a)
np.mean(a)
np.std(a)
np.max(a, axis=0)
np.min(a, axis=1)

七、线性代数操作

NumPy 拥有强大的线性代数模块:

from numpy.linalg import inv, det, eig, solveA = np.array([[1, 2], [3, 4]])inv(A)         # 求逆
det(A)         # 行列式
eig(A)         # 特征值与特征向量
b = np.array([5, 6])
solve(A, b)    # 解线性方程 Ax = b

八、随机数生成

np.random.seed(0)            # 设置随机种子
np.random.rand(2, 3)         # 均匀分布
np.random.randn(2, 3)        # 正态分布
np.random.randint(0, 10, 5)  # 整数
np.random.choice([1, 2, 3], size=4)

九、实际应用示例:矩阵回归模型

# 简单的线性回归计算示例: y = Xβ
X = np.array([[1, 1], [1, 2], [1, 3]])
y = np.array([1, 2, 3])# 最小二乘解: β = (X.T X)^-1 X.T y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print("线性回归系数:", beta)

输出:

线性回归系数: [0. 1.]

这说明模型 y = x 完全拟合了数据。


十、总结

NumPy 是 Python 科学计算的基础设施。熟练掌握 NumPy,能帮助你写出更高效、更简洁的数值计算代码,也为深入学习 Pandas、Scikit-learn、TensorFlow 等框架打下坚实的基础。

建议的学习路径:

  • 掌握 ndarray 的基本操作

  • 学会广播和向量化操作

  • 理解数组运算的内存和性能特点

  • 尝试用 NumPy 完成简单的数值计算任务

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

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

相关文章

Java基础(IO)

所有操作都在内存,不能长时间保存,IO主要在硬盘,可以长时间保存。 一、File类 File类被定义为文件和目录路径名的抽象表示形式,这是因为 File 类既可以表示文件也可以表示目录,他们都通过对应的路径来描述。 提供构…

仿正点原子驱动BMP280气压传感器实例

文章目录 前言 一、寄存器头文件定义 二、设备树文件中添加节点 三、驱动文件编写 四、编写驱动测试文件并编译测试 总结 前言 本文驱动开发仿照正点原子的iic驱动实现,同时附上bmp280的数据手册,可访问下面的链接: BMP280_Bosch(博世…

论坛系统(中-1)

软件开发 编写公共代码 定义状态码 对执⾏业务处理逻辑过程中可能出现的成功与失败状态做针对性描述(根据需求分析阶段可以遇见的问题提前做出定义),⽤枚举定义状态码,先定义⼀部分,业务中遇到新的问题再添加 定义状态码如下 状态码类型描…

E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯

EH流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯 在现代工业自动化的广阔舞台上,Profibus DP与Modbus TCP这两种通信协议各领风骚,它们在不同的应用场景中发挥着举足轻重的作用。但工业生产的复杂性往往要求不同设备、系统之间能够顺畅沟…

服务器中存储空间不足该怎么办?

服务器作为存储数据信息的重要网络设备,随着企业业务的不断拓展,所需要存储的数据信息也在不断增加,最终会导致服务器中存储空间不足,这不仅会影响到服务器系统性能,还会造成业务无法正常执行,那么&#xf…

C++23 views::chunk_by (P2443R1) 详解

文章目录 引言C23 范围库概述范围视图(Range Views)范围算法(Range Algorithms)范围适配器(Range Adapters) std::views::chunk_by 介绍基本概念特性使用场景 示例代码简单示例自定义谓词示例 总结 引言 在…

零碳园区能源系统-多能互补体系

构建以可再生能源为核心的零碳园区能源系统,需整合光储直柔、光伏发电、微电网、氢能与储能技术,通过多能协同与智能调控实现能源生产、存储、消费全链条优化。以下是系统性实施方案: 一、系统架构设计 1. 多能互补体系 (图示&a…

elastic search学习

首先在自己电脑上安装elastic search。安装成功后,查看ES是否启动成功。 安装过程参考:ElasticSearch入门1: mac 安装 - 霜井 - 博客园 安装完成后,直接执行bin目录中的elastic search命令后,就可以启动成功! 在网页…

mysql8常用sql语句

查询结果带行号 -- 表名为 mi_user, 假设包含列 id ,address SELECT ROW_NUMBER() OVER (ORDER BY id) AS row_num, t.id, t.address FROM mi_user t ; SELECT ROW_NUMBER() OVER ( ) AS row_num, t.id, t.address FROM mi_user t ; 更新某列数…

Memcached 服务搭建和集成使用的详细步骤示例

以下是 Memcached 服务搭建和集成使用的详细步骤示例: 一、搭建 Memcached 服务 安装 Memcached Linux 系统 yum 安装:执行命令 yum install -y memcached memcached-devel。源码安装 下载源码:wget http://www.memcached.org/files/memcach…

2. 盒模型/布局模块 - 响应式产品展示页_案例:电商产品网格布局

2. 盒模型/布局模块 - 响应式产品展示页 案例&#xff1a;电商产品网格布局 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">:root {--primary-color…

Go基于plugin的热更新初体验

背景 对于一个部署在生产环境的项目来说&#xff0c;我们希望当代码出现bug的时候&#xff0c;可以不用重启进程而达到动态修改代码的目的—— 这就是代码热部署&#xff01; 使用java做游戏服务器&#xff0c;最大的好处是&#xff0c;当代码出现bug&#xff0c;可以直接热…

【RabbitMQ】工作队列和发布/订阅模式的具体实现

文章目录 建立连接工作队列模式实现创建队列和交换机生产者代码消费者代码运行程序启动消费者启动生产者 发布/订阅模式实现创建队列和交换机生产者代码创建交换机声明两个队列绑定队列和交换机发送消息完整代码 消费者代码完整代码 运行程序启动生产者启动消费者 建立连接 我…

Codeforces Round 998 (Div. 3)

A. Fibonacciness 题目大意 给你四个数字abde&#xff0c;让你找到一个中间值c&#xff0c;问 a b c a b c abc &#xff0c; b c d b c d bcd &#xff0c; c d e c d e cde 最多能有几个式子成立 解题思路 显然最多就六种情况&#xff0c;暴力枚举即可 代…

火山引擎发展初始

火山引擎是字节跳动旗下的云计算服务品牌&#xff0c;其云服务业务的启动和正式商业化时间线如下&#xff1a; 1. **初期探索&#xff08;2020年之前&#xff09;** 字节跳动在早期为支持自身业务&#xff08;如抖音、今日头条等&#xff09;构建了强大的基础设施和技术中…

【认知思维】光环效应:第一印象的持久力量

什么是光环效应 光环效应&#xff08;Halo Effect&#xff09;是指人们倾向于让对某人或某物的一个显著特质的印象影响对其他特质的评价的认知偏差。简单来说&#xff0c;当我们对某人的一个特质&#xff08;如外表、智力或某项技能&#xff09;形成积极印象时&#xff0c;我们…

Java Solon v3.3.0 发布(国产优秀应用开发基座)

Solon 框架&#xff01; Solon 是新一代&#xff0c;Java 企业级应用开发框架。从零开始构建&#xff08;No Java-EE&#xff09;&#xff0c;有灵活的接口规范与开放生态。采用商用友好的 Apache 2.0 开源协议&#xff0c;是“杭州无耳科技有限公司”开源的根级项目&#xff…

力扣-104.二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 class Solution { public:int maxDepth(TreeNode* root) {if(!root){return 0;}return max(maxDepth(root->left), maxDepth(root->…

单反和无反(私人笔记)

① 单反相机&#xff1a; 定义&#xff1a; 单反相机&#xff08;Single-Lens Reflex&#xff0c;SLR&#xff09;是一种带有反光镜结构的数码相机。光线通过镜头进入后&#xff0c;先被反光镜反射到五棱镜/五面镜&#xff0c;再通过取景器进入人眼。按下快门时&#xff0c;反…

超详细讲解C语言转义字符\a \b \r \t \? \n等等

转义字符 C语言有一组字符很特殊&#xff0c;叫做转义字符&#xff0c;顾名思义&#xff0c;改变原来的意思的字符。 1 \? ??)是一个三字母词&#xff0c;在以前的编译器它会被编译为] (??会被编译为[ 因此在以前输入(are you ok ??)就会被编译为are you ok ] 解决这个…