numpy库

NumPy 库全面指南

NumPy (Numerical Python) 是 Python 科学计算的基础库,提供了高性能的多维数组对象和工具。以下是 NumPy 的核心功能和使用方法。

一、安装与基础

1. 安装 NumPy

pip install numpy

2. 导入 NumPy

import numpy as np # 标准导入方式

二、数组创建

1. 基础数组创建

# 从列表创建 
a = np.array([1, 2, 3]) # 一维数组 
b = np.array([[1, 2], [3, 4]]) # 二维数组 
# 特殊数组zeros = np.zeros((3, 4)) # 全0数组 
ones = np.ones((2, 3)) # 全1数组 
empty = np.empty((2, 2)) # 未初始化数组 
full = np.full((2, 2), 7) # 填充指定值 
eye = np.eye(3) # 单位矩阵

2. 序列数组

# 等差数列 
arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8] 
# 等间距数列 
lin = np.linspace(0, 1, 5) # [0. , 0.25, 0.5 , 0.75, 1. ] 
# 对数间隔 
log = np.logspace(0, 2, 3) # [ 1., 10., 100.]

3. 随机数组

# 均匀分布
rand = np.random.rand(2, 3)       # 0-1随机数# 正态分布
randn = np.random.randn(100)      # 标准正态分布# 随机整数
randint = np.random.randint(0, 10, size=5)

三、数组操作

1. 数组属性

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim)    # 维度: 2
print(arr.shape)   # 形状: (2, 3)
print(arr.size)    # 元素总数: 6
print(arr.dtype)   # 数据类型: int32/int64

2. 索引与切片

arr = np.array([0, 1, 2, 3, 4, 5])# 基本索引
print(arr[2])      # 2
print(arr[-1])     # 5# 切片
print(arr[1:4])    # [1, 2, 3]
print(arr[::2])    # [0, 2, 4]# 多维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2])  # 6
print(arr2d[:, 1])  # [2, 5]

3. 形状操作

arr = np.arange(6)# 改变形状
print(arr.reshape(2, 3))
# [[0 1 2]
#  [3 4 5]]# 展平数组
print(arr.flatten())    # [0 1 2 3 4 5]# 转置
arr2d = np.arange(6).reshape(2, 3)
print(arr2d.T)
# [[0 3]
#  [1 4]
#  [2 5]]

四、数组运算

1. 数学运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 算术运算
print(a + b)    # [5 7 9]
print(a * b)    # [4 10 18]
print(a ** 2)   # [1 4 9]# 三角函数
print(np.sin(a))# 对数运算
print(np.log(a))

2. 统计运算

arr = np.array([[1, 2], [3, 4]])print(np.sum(arr))       # 10
print(np.mean(arr))      # 2.5
print(np.max(arr))       # 4
print(np.min(arr, axis=0))  # 每列最小值 [1, 2]
print(np.std(arr))       # 标准差
print(np.median(arr))    # 中位数

3. 广播机制

a = np.array([1, 2, 3])
b = 2# 标量广播
print(a * b)  # [2, 4, 6]# 形状不同的数组广播
a = np.array([[1], [2], [3]])
b = np.array([4, 5, 6])
print(a + b)
# [[5 6 7]
#  [6 7 8]
#  [7 8 9]]

五、线性代数

1. 矩阵运算

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩阵乘法
print(np.dot(a, b))
# [[19 22]
#  [43 50]]# 矩阵转置
print(a.T)
# [[1 3]
#  [2 4]]# 行列式
print(np.linalg.det(a))  # -2.0# 逆矩阵
print(np.linalg.inv(a))
# [[-2.   1. ]
#  [ 1.5 -0.5]]

2. 解线性方程组

# 解方程组:
# 3x + y = 9
# x + 2y = 8
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
X = np.linalg.solve(A, B)
print(X)  # [2. 3.]

六、、实用技巧

1. 布尔索引

arr = np.array([1, 2, 3, 4, 5])# 条件筛选
print(arr[arr > 3])          # [4, 5]
print(arr[(arr > 2) & (arr < 5)])  # [3, 4]

2. 花式索引

arr = np.arange(12).reshape(3, 4)# 使用索引数组
print(arr[[0, 2]])  # 第0行和第2行
print(arr[:, [1, 3]])  # 第1列和第3列

3.数组切割

import numpy as np
arr = np.arange(36).reshape(6,6)
print(arr)
'''[[ 0  1  2  3  4  5][ 6  7  8  9 10 11][12 13 14 15 16 17][18 19 20 21 22 23][24 25 26 27 28 29][30 31 32 33 34 35]]'''
arr1 = np.hsplit(arr,2)#水平
print(arr1)
'''[array([[ 0,  1,  2],[ 6,  7,  8],[12, 13, 14],[18, 19, 20],[24, 25, 26],[30, 31, 32]]), array([[ 3,  4,  5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23],[27, 28, 29],[33, 34, 35]])]'''
arr2 = np.vsplit(arr,2)#竖直
print(arr2)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
b = np.split(arr,2,axis=0)#0为水平,1为竖直,默认为1
print(b)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
e = np.array_split(arr,2,1)

4.数组拼接

import numpy as nparr = np.arange(9).reshape(3,3)arr2 =arr*2
print(arr2)arr3 = np.hstack((arr,arr2))#水平
print(arr3,'\n')arr4 = np.vstack((arr,arr2))#竖直
print(arr4,end='\n')arr6 = np.concatenate((arr,arr2),axis=0)#0为水平,1为竖直,默认为0
print(arr6,end='\n')'''[[ 0  2  4][ 6  8 10][12 14 16]]#原数组[[ 0  1  2  0  2  4][ 3  4  5  6  8 10][ 6  7  8 12 14 16]] #水平[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#竖直[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#
'''

5.读取文件

import numpy as np# 读取简单文本文件
data = np.loadtxt('data.txt')
print(data)# 指定分隔符(默认是任意空白字符)
data = np.loadtxt('data.csv', delimiter=',')# 跳过标题行
data = np.loadtxt('data.txt', skiprows=1)# 选择特定列
data = np.loadtxt('data.txt', usecols=(0, 2))  # 读取第1和第3列# 指定数据类型
data = np.loadtxt('data.txt', dtype=np.float32)

6、数组排序

import numpy as nparr = np.array([3, 1, 4, 2, 5])
sorted_arr = np.sort(arr)
print(sorted_arr)  # 输出: [1 2 3 4 5]
arr = np.array([3, 1, 4, 2, 5])arr = np.array([3, 1, 4, 2, 5])
indices = np.argsort(arr)
print(indices)  # 输出: [1 3 0 2 4]
print(arr[indices])  # 输出: [1 2 3 4 5]arr = np.array(['apple', 'banana', 'cherry', 'date'])# 创建结构化数组
dtype = [('name', 'S10'), ('age', int), ('score', float)]
values = [('Alice', 25, 88.5), ('Bob', 32, 92.3), ('Charlie', 28, 85.0)]
arr = np.array(values, dtype=dtype)# 按年龄排序
print(np.sort(arr, order='age'))
# [(b'Alice', 25, 88.5) (b'Charlie', 28, 85. ) (b'Bob', 32, 92.3)]# 先按分数降序,再按年龄升序
print(np.sort(arr, order=['score', 'age']))
# [(b'Charlie', 28, 85. ) (b'Alice', 25, 88.5) (b'Bob', 32, 92.3)]# 按字符串长度排序
print(np.sort(arr, key=lambda x: len(x)))
# ['date' 'apple' 'banana' 'cherry']

 

NumPy 是 Python 科学计算生态系统的基石,掌握 NumPy 将为学习 Pandas、SciPy、scikit-learn 等库打下坚实基础。

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

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

相关文章

Vue3 setup、ref和reactive函数

一、setup函数1.理解&#xff1a;Vue3.0中一个新的配置项&#xff0c;值为一个函数。2.setup是所有Composition API(组合API)的“表演舞台”。3.组件中用到的&#xff1a;数据、方法等等&#xff0c;均要配置在setup中。4.setup函数的两种返回值&#xff1a;(1).若返回一个对象…

python中appium 的NoSuchElementException错误 原因以及解决办法

错误收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件

大家好&#xff0c;今天继续更新MybatisPlus从入门到入土系列&#xff0c;上一次的持久层接口还没讲完&#xff0c;只讲了IService接口&#xff0c;今天我们继续来讲一下。 BaseMapper BaseMapper中的方法也比较简单&#xff0c;都是增删改查的基础API&#xff0c;不知道大家还…

数组和指针的关系

在 C 语言中&#xff0c;​指针和数组有着非常紧密的联系&#xff0c;但它们本质上是 ​不同的概念。理解它们的关系是掌握 C 语言内存操作的关键。下面我会从多个角度帮你梳理 ​指针和数组的直接联系&#xff0c;并解释它们的异同点。1. 数组和指针的本质区别​概念本质存储方…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索

系列篇章💥 No. 文章 1 AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践 2 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索 3 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践) 4 AI大模型探索之路…

从0到1学PHP(十二):PHP 框架入门与项目实战

目录一、主流 PHP 框架介绍1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的优势二、框架基本使用&#xff08;以 Laravel 为例&#xff09;2.1 框架的安装与配置2.2 路由定义、控制器创建、视图渲染2.3 数据库操作&#xff08;ORM 的使用&#xff09;三、小型项目实战3.1 项目需求分…

MPLS LSP

一、概述上一章我们已经介绍过,LSP是MPLS报文在MPLS网络中转发时经过的路径,可以看作是由报文传输方向节点为对应FEC分配的MPLS入标签组成的,因为每台设备上为每个FEC分配的入标签是唯一 的&#xff0c;并与由下游节点为本地节点上该FEC分配的出标签建立映射关系&#xff0c; 所…

图像、视频、音频多模态大模型中长上下文token压缩方法综述

多模态大模型MLLMs 能够处理高分辨率图像、长视频序列和冗长音频输入等复杂上下文&#xff0c;但自注意力机制的二次复杂度使得大量输入 token 带来了巨大的计算和内存需求。 如下图&#xff0c;上&#xff1a;图像、视频和音频数据类型可以在其表示维度上进行扩展&#xff0c;…

Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官

文章目录一、为什么从 MultipartResolver 开始&#xff1f;二、核心接口&#xff1a;定义文件上传的契约三、实现解析&#xff1a;两种策略的源码较量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首选&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何实现电源控制的?

STM32的电源控制主要通过内置的电源管理模块&#xff08;PWR&#xff09;实现&#xff0c;涵盖电压调节、功耗模式切换和电源监控等功能。以下是其核心机制及实现方式&#xff1a;​​1. 电源架构与供电区域​​STM32的电源系统分为多个供电区域&#xff0c;各司其职&#xff1…

《R for Data Science (2e)》免费中文翻译 (第3章) --- Data transformation(1)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

rclone、rsync、scp使用总结

数据同步工具使用总结【rclone、rsync、scp】一、数据处理背景二、数据处理方法对比1、数据关系梳理2、不同工具处理方法3、经验总结三、工具扩展知识1、rclone工具介绍&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安装工具及配置本地文件迁移到云上服务…

用latex+vscode+ctex写毕业论文

文章目录前言一、安装latex二、安装ctex包三、更新ctex包四、使用ctex文档类前言 用latexvscodectex写毕业论文。&#xff08;英文论文不用安装ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;为中文 LATEX 文档提供了汉字输出支持、标点压缩、字…

深度学习·mmsegmentation基础教程

mmsegmentation的使用教程 mmsegmentation微调方法总结 自定义自己的数据集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注册&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定义训练和测试的pipeline&#xff1a;mmsegme…

InfluxDB 与 Node.js 框架:Express 集成方案(二)

四、优化与注意事项 &#xff08;一&#xff09;性能优化技巧 连接池管理&#xff1a;使用连接池可以有效减少创建和销毁数据库连接的开销。在 Node.js 中&#xff0c;可以借助influx模块结合第三方连接池库&#xff0c;如generic-pool来实现连接池的管理 。通过设置连接池的…

单位长度上的RC参数

1inch1000mil25.4mm2.54cm 使用SI9000计算导线上电容电感参数并使用Q2D进行仿真验证。使用SI9000建立一个阻抗为50欧的微带线模型&#xff0c;后对该模型进行1GHz频域计算 通过计算得到结果&#xff0c;可知1GHz频率下单位传输线上的RLGC参数使用SI9000计算好单位长度上的RLGC参…

基于Dockerfile 部署一个 Flask 应用

Docker 与 Python&#xff1a;容器化部署应用&#xff0c;实现快速发布与弹性伸缩 以下是一个简单的 Flask 应用 # app.py - 一个简单的Flask应用 from flask import Flask import osapp Flask(__name__)app.route("/") def hello():env os.environ.get(FLASK_ENV,…

DFT设计中的不同阶段介绍

在DFT&#xff08;Design for Test&#xff0c;可测试性设计&#xff09;软件开发中&#xff0c;针对设计检测的完整流程通常包含Setup&#xff08;设置&#xff09;、Analysis&#xff08;分析&#xff09;、Insertion&#xff08;插入&#xff09;和Verification&#xff08;…

自动化测试准备工作:概念篇

自动化 什么是自动化? 超市的自动闸门&#xff0c;不需要手动的开门关门生活中的自动动化案例有效的减少了人力的消耗&#xff0c;同时也提高了生活的质量。 软件自动化测试同理&#xff0c;通过编写自动化测试程序&#xff08;减少人力和时间的消耗&#xff0c;提高软件的…

每日主题切换网页:用纯前端技术打造随心情变化的动态界面

&#x1f3a8; 每日主题切换网页&#xff1a;用纯前端技术打造随心情变化的动态界面 项目地址&#xff1a;https://github.com/hhse/daily-theme-switcher 在线演示&#xff1a;https://hhse.github.io/daily-theme-switcher 这里写目录标题&#x1f3a8; 每日主题切换网页&…