0

0

Python怎么用NumPy进行矩阵运算_NumPy矩阵乘法与线性代数运算

下次还敢

下次还敢

发布时间:2025-09-15 21:12:02

|

495人浏览过

|

来源于php中文网

原创

numpy通过ndarray实现高效矩阵运算,支持元素级操作及使用@、np.dot()进行矩阵乘法,并提供np.linalg模块用于求逆、解线性方程组和特征值分析。

python怎么用numpy进行矩阵运算_numpy矩阵乘法与线性代数运算

NumPy是Python中进行高效矩阵运算的核心库。要用它进行矩阵运算,最直接的方式是利用其数组(

ndarray
)结构,并结合专门的函数如
np.dot()
@
运算符进行矩阵乘法,以及
np.linalg
模块处理更复杂的线性代数问题。它将底层的C或Fortran优化性能带入Python,让大规模数值计算变得触手可及。

NumPy处理矩阵运算的核心在于它的

ndarray
对象。我们通常会先将列表或数组转换为
np.array
,然后就可以进行各种数学操作了。

比如,创建一个2x3的矩阵A和一个3x2的矩阵B:

import numpy as np

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

B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

print("矩阵A:\n", A)
print("矩阵B:\n", B)

元素级运算 (Element-wise Operations): NumPy默认的

*
运算符执行的是元素级乘法,而不是矩阵乘法。这意味着两个形状相同的数组,对应位置的元素相乘。

C = np.array([[1, 2], [3, 4]])
D = np.array([[5, 6], [7, 8]])
print("元素级乘法 C * D:\n", C * D)
# 结果是 [[ 5 12] [21 32]]

加减法也是元素级的:

立即学习Python免费学习笔记(深入)”;

print("元素级加法 A + A:\n", A + A)
print("元素级减法 A - A:\n", A - A)

矩阵乘法 (Matrix Multiplication): 这是很多人初学NumPy时容易混淆的地方。标准的矩阵乘法,也就是线性代数中的“点积”,在NumPy中有几种实现方式:

  1. np.dot()
    函数: 这是比较传统和通用的方式,可以用于向量点积、矩阵-向量乘法以及矩阵-矩阵乘法。

    C_dot = np.dot(A, B)
    print("使用np.dot()进行矩阵乘法 A . B:\n", C_dot)
    # 结果是一个2x2的矩阵
  2. @
    运算符 (Python 3.5+): 这是更现代、更符合数学直觉的语法糖,推荐使用。它等同于
    np.matmul()

    智川X-Agent
    智川X-Agent

    中科闻歌推出的一站式AI智能体开发平台

    下载
    C_at = A @ B
    print("使用@运算符进行矩阵乘法 A @ B:\n", C_at)
    # 结果与np.dot()相同
  3. np.matmul()
    函数: 这个函数专门用于矩阵乘法。与
    np.dot()
    在处理多维数组时略有不同,
    np.matmul()
    更严格地遵循矩阵乘法的广播规则。但在处理二维矩阵时,它和
    np.dot()
    以及
    @
    运算符的结果是一致的。

    C_matmul = np.matmul(A, B)
    print("使用np.matmul()进行矩阵乘法 A matmul B:\n", C_matmul)
    # 结果与上述两种方法相同

选择哪种方式?个人经验是,对于二维矩阵乘法,

@
运算符最清晰易读。如果涉及到向量点积或需要向后兼容Python 3.5以下版本,
np.dot()
是个稳妥的选择。
np.matmul()
则在处理高维数组时有其特定优势。

NumPy如何处理向量与矩阵的乘法?

在NumPy中,向量通常被表示为一维数组,或者通过

reshape
转换为行向量或列向量的二维数组。理解这一点对于正确执行乘法至关重要。

我们先定义一个向量:

v = np.array([1, 2, 3])
print("向量v:\n", v)

矩阵乘以向量: 如果想用矩阵A(2x3)乘以向量v(3),

np.dot()
@
运算符都能很好地处理。NumPy会智能地将一维向量解释为列向量或行向量,以满足乘法条件。

# A是2x3,v是长度3的一维数组。NumPy会将其视为3x1的列向量进行乘法
result_Av = A @ v
print("矩阵A乘以向量v (A @ v):\n", result_Av)
# 结果是一个长度为2的一维数组,等同于2x1的列向量

向量乘以矩阵: 如果想用向量v(3)乘以矩阵A(2x3),这在数学上是不直接允许的(因为v是1x3,A是2x3,内维度不匹配)。但如果你想让v作为一个行向量(1x3)去乘以A的转置(3x2),那就可以。

# 将v明确地表示为行向量 (1x3)
v_row = v.reshape(1, -1) # 或 np.array([v])
print("行向量v_row:\n", v_row)

# 矩阵A的转置是3x2
A_T = A.T
print("矩阵A的转置A_T:\n", A_T)

# 现在可以进行乘法:(1x3) @ (3x2) -> 1x2
result_vA_T = v_row @ A_T
print("行向量v_row乘以A的转置 (v_row @ A.T):\n", result_vA_T)

这里需要注意,NumPy在处理一维数组时,其“形状”是灵活的。当它作为点积的参数时,它会根据另一个参数的形状自动调整。这种隐式转换有时会让人困惑,所以显式地使用

reshape
[:, np.newaxis]
来创建行/列向量,能让代码意图更清晰。

NumPy的
np.linalg
模块在高级线性代数运算中有哪些应用?

np.linalg
模块是NumPy的精华之一,它提供了一系列标准线性代数运算的函数,对于科学计算、机器学习等领域至关重要。

1. 逆矩阵 (Inverse Matrix): 计算方阵的逆。如果矩阵不可逆(奇异矩阵),会抛出

LinAlgError

M = np.array([[1, 2],
              [3, 4]])
try:
    M_inv = np.linalg.inv(M)
    print("矩阵M的逆:\n", M_inv)
    # 验证:M @ M_inv 应该接近单位矩阵
    print("M @ M_inv:\n", M @ M_inv)
except np.linalg.LinAlgError as e:
    print(f"矩阵不可逆: {e}")

2. 求解线性方程组 (Solve Linear Equations): 给定线性方程组 Ax = b,我们可以用

np.linalg.solve(A, b)
来直接求解x。这比先求A的逆再乘以b更稳定、更高效,尤其是在大型或接近奇异的矩阵上。

# 求解方程组:
# x + 2y = 5
# 3x + 4y = 11
A_eq = np.array([[1, 2],
                 [3, 4]])
b_eq = np.array([5, 11])

x_solution = np.linalg.solve(A_eq, b_eq)
print("线性方程组的解x:\n", x_solution)
# 验证:A_eq @ x_solution 应该接近b_eq
print("A_eq @ x_solution:\n", A_eq @ x_solution)

**3. 特征值和特征

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

71

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

82

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号