ndarray的创建

用途

方法

语法示例

核心作用

输出示例

基础构造

▪ 从 Python 数据结构创建

np.array()

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

将列表/元组转换为 ndarray

array([[1, 2], [3, 4]])

▪ 复制数组

np.copy()

np.copy(arr)

创建独立副本(深拷贝)

与原数组相同但不共享内存

预定义形状填充

▪ 全0数组

np.zeros()

np.zeros((2,3))

快速初始化全0数组

[[0., 0., 0.], [0., 0., 0.]]

▪ 全1数组

np.ones()

np.ones((3,2), dtype=int)

快速初始化全1数组

[[1, 1], [1, 1], [1, 1]]

▪ 未初始化数组

np.empty()

np.empty((2,2))

预分配内存(值随机)

随机值(如 [[1e-323, 0.], [0., 0.]]

▪ 填充固定值

np.full()

np.full((2,3), 5)

用指定值填充数组

[[5, 5, 5], [5, 5, 5]]

基于数值范围生成

▪ 等差序列

np.arange()

np.arange(0, 10, 2)

生成步长固定的序列(不含终点)

[0, 2, 4, 6, 8]

▪ 等间隔序列

np.linspace()

np.linspace(0, 1, 5)

生成指定数量的等间隔值(含终点)

[0.0, 0.25, 0.5, 0.75, 1.0]

▪ 对数间隔序列

np.logspace()

np.logspace(0, 2, 3, base=10)

生成对数间隔值(如 10^0, 10^1, 10^2

[1.0, 10.0, 100.0]

特殊矩阵生成

▪ 单位矩阵

np.eye()

np.eye(3)

生成单位矩阵(对角线为1)

[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]

▪ 对角矩阵

np.diag()

np.diag([1, 2, 3])

生成以指定值为对角线的矩阵

[[1, 0, 0], [0, 2, 0], [0, 0, 3]]

随机数组生成

▪ 均匀分布随机数

np.random.rand()

np.random.rand(2,2)

生成 [0,1) 均匀分布的随机数

[[0.43, 0.89], [0.21, 0.57]]

▪ 正态分布随机数

np.random.randn()

np.random.randn(2,2)

生成标准正态分布随机数(均值为0,方差为1)

[[-0.5, 1.2], [0.3, -1.8]]

▪ 随机整数

np.random.randint()

np.random.randint(1,10, (2,2))

生成指定范围内的随机整数

[[3, 7], [5, 2]]

高级构造方法

▪ 从字符串创建

np.array()

np.array(['a', 'bc'])

将字符串转换为字符数组

array(['a', 'bc'], dtype='<U2')

▪ 从文件读取

np.loadtxt()

np.loadtxt('data.txt')

从文本文件加载数据

依赖文件内容(如 [[1., 2.], [3., 4.]]

▪ 函数生成数组

np.fromfunction()

np.fromfunction(lambda i,j: i+j, (3,3))

根据函数生成数组元素

[[0., 1., 2.], [1., 2., 3.], [2., 3., 4.]]

创建方法汇总

  1. 基础构造:  适用于手动构建小规模数组或复制已有数据。
  1. 预定义形状填充:  用于快速初始化固定形状的数组(如全0占位、全1初始化)。
  1. 基于数值范围生成:  生成数值序列,常用于模拟时间序列、坐标网格等。
  1. 特殊矩阵生成:  数学运算专用(如线性代数中的单位矩阵)。
  1. 随机数组生成:  模拟实验数据、初始化神经网络权重等场景。
  1. 高级构造方法:  处理非结构化数据(如文件、字符串)或通过函数生成复杂数组。

2.2.3.1   Python 数据结构转换

将 Python 列表、元组等转换为 ndarray,是最直接的方式。

np.array(object, dtype=None)

Python
import numpy as np

# 从列表创建一维数组
arr1 = np.array([1, 2, 3])
print(arr1)  # 输出: [1 2 3]

# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2], [3, 4]])
print(arr2)
# 输出:
# [[1 2]
#  [3 4]]

# 指定数据类型
arr3 = np.array([1, 2.5], dtype=np.float32)
print(arr3.dtype)  # 输出: float32

注意事项

  • 混合类型时,NumPy 会统一为最高优先级类型(如 int + float → float数值 + 字符串 → 字符串)。
  • 列表的嵌套层级决定 ndim(维度数)。

2.2.3.2 预定义形状填充

快速初始化固定形状的数组,常用于占位或初始化权重矩阵。

Python
np.zeros(shape, dtype=float)  # 全0  返回给定形状和类型的新数组,用0填充。
np.ones(shape, dtype=float)   # 全1  返回给定形状和类型的新数组,用1填充。

Python
# 创建 2x3 全0浮点数组
zeros_arr = np.zeros((2, 3))
print(zeros_arr)
# 输出:
# [[0. 0. 0.]
#  [0. 0. 0.]]

# 创建 3x2 全1整数数组
ones_arr = np.ones((3, 2), dtype=int)
print(ones_arr)
# 输出:
# [[1 1]
#  [1 1]
#  [1 1]]

默认数据类型为 float64,需显式指定 dtype 为 int 或其他类型。

未初始化的数组 (np.empty)

np.empty(shape, dtype=float)

返回给定形状和类型的未初始化的新数组。

创建未初始化的数组(值随机,取决于内存状态),适用于对性能要求极高的场景。

Python
empty_arr = np.empty((2, 2))
print(empty_arr)  # 输出可能为随机值(如 [[1e-323, 0. ], [0., 0. ]])

不推荐直接使用:需手动填充数据,否则可能引入不可预测的错误。

需要注意的是,np.empty 并不保证数组元素被初始化为 0,它只是分配内存空间,数组中的元素值是未初始化的,可能是内存中的任意值。

重复填充数组 (np.full)

np.full(shape, fill_value, dtype)

Python
full_arr = np.full((2, 3), 5)
print(full_arr)
# 输出:
# [[5 5 5]
#  [5 5 5]]

zeros_like()返回与给定数组具有相同形状和类型的0新数组。

ones_like()返回与给定数组具有相同形状和类型的1新数组。

empty_like()返回与给定数组具有相同形状和类型的未初始化的新数组。

Plain Text
arr2 = np.ones_like(arr1)  # 创建和arr1形状相同的全1数组
arr4 = np.empty_like(arr3)  # 创建和arr3形状相同的未初始化数组
arr2 = np.full_like(arr1, 5)

2.2.3.3 基于数值范围生成

(1) np.arange:等差序列

np.arange(start, stop, step)

返回在给定范围内用均匀间隔的值填充的一维数组。

Python
arr = np.arange(0, 10, 2)  # 0 ≤ 值 <10,步长2
print(arr)  # 输出: [0 2 4 6 8]

(2) np.linspace:等间隔数组(含终点)

np.linspace(start, stop, num=50)  

返回指定范围和元素个数的等差数列。数组元素类型为浮点型。

Python
arr = np.linspace(0, 1, 5)  # 0到1之间生成5个等间隔值
print(arr)  # 输出: [0.   0.25 0.5  0.75 1.  ]

(3) np.logspace:对数间隔数组

np.logspace(start, stop, num=50, base=10)  

返回指定指数范围、元素个数、底数的等比数列。

Python
arr = np.logspace(0, 2, 3)  # 10^0, 10^1, 10^2
print(arr)  # 输出: [  1.  10. 100.]

2.2.3.4  特殊矩阵

矩阵补充知识

矩阵是线性代数的核心概念,可以理解为一个数字的矩形表格,用来表示数据、方程组或线性变换。下面用最直观的方式介绍它的基本概念和应用。

矩阵是一个由 行(row) 和 列(column) 排列成的矩形数组,例如:

  • 形状(shape):这个矩阵有 2 行 3 列,记作 2×32×3 矩阵。
  • 元素(entry):矩阵中的每个数字称为元素,如 A1,2=2A1,2=2(第 1 行第 2 列)。
  1. 矩阵的用途

(1) 表示线性方程组

例如,方程组:

可以写成矩阵形式:

即 Ax=b,其中:

  • A 是系数矩阵,
  • x 是未知数列向量,
  • b 是常数项列向量。

(2) 表示线性变换

矩阵可以描述空间中的变换,比如旋转、缩放、投影。

例如,一个 2×22×2 矩阵可以表示二维平面的旋转:

作用在向量 [xy][xy] 上,会使其旋转 θθ 角度。

(3) 数据表示(如机器学习)

在机器学习中,数据集通常用矩阵表示:

  • 每一行代表一个样本(如一张图片),
  • 每一列代表一个特征(如像素值)。
  1. 矩阵的基本运算

(1) 矩阵加法

对应位置的元素相加,要求两个矩阵形状相同:

(2) 矩阵数乘

矩阵的每个元素乘以一个标量(数):

(3) 矩阵乘法

矩阵乘法 不是 对应元素相乘,而是 行 × 列 的点积运算:

注意:矩阵乘法不满足交换律(AB≠BAAB=BA)。

(4) 转置(Transpose)

行列互换:

  1. 特殊矩阵

(1) 单位矩阵 (np.eye/np.identity)

Python
np.eye(N)  # NxN 单位矩阵
np.identity(N)

Python
eye_arr = np.eye(3)
print(eye_arr)
# 输出:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

(2) 对角矩阵 (np.diag)

Python
np.diag([a, b, c])  # 对角线为 a, b, c,其余为0

Python
diag_arr = np.diag([1, 2, 3])
print(diag_arr)
# 输出:
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]

2.2.3.5  随机数组

(1) 均匀分布随机数 (np.random.rand)

返回给定形状的数组,用 [0, 1) 上均匀分布的随机样本填充。

Python
rand_arr = np.random.rand(2, 2)  # [0,1) 均匀分布
# 输出示例: [[0.43, 0.89], [0.21, 0.57]]

(2) 正态分布随机数 (np.random.randn)

返回给定形状的数组,用标准正态分布(均值为0,标准差为1)的随机样本填充。

Python
randn_arr = np.random.randn(2, 2)  # 均值为0,方差为1
# 输出示例: [[-0.5, 1.2], [0.3, -1.8]]

(3) 随机整数 (np.random.randint)

返回给定形状的数组,用从低位(包含)到高位(不包含)上均匀分布的随机整数填充。

Python
int_arr = np.random.randint(1, 10, (2, 2))  # [1,10) 的整数
# 输出示例: [[3, 7], [5, 2]]

(4)random.uniform()

random.uniform()返回给定形状的数组,用从低位(包含)到高位(不包含)上均匀分布的随机浮点数填充。

arr3 = np.random.uniform(3, 6, (2, 3))

# [[5.69275495 3.84857937 3.2899215 ]

#  [5.32035519 3.7460973  3.33859905]]

(5) 设置随机种子 (np.random.seed)

np.random.seed 是 NumPy 中用于设置**随机数生成器种子**的函数,目的是确保程序的随机操作可以重复生成相同的结果(即保证随机结果的确定性)。这在实验复现、调试和教学场景中非常有用。

Python
import numpy as np

# 设置随机种子
np.random.seed(42)  # 参数可以是任意整数

# 生成随机数
print(np.random.rand(3))  # 输出固定结果

每次运行上述代码都会得到相同的随机数序列(例如 [0.37454012, 0.95071431, 0.73199394])。

关键细节

  1. 种子的一致性
  • 相同种子生成的随机数序列完全一致。
  • 不同种子(如 np.random.seed(0) 和 np.random.seed(1))会产生不同序列。
  1. 作用范围
  • 种子对后续所有基于 NumPy 的随机函数生效(如 np.random.rand(), np.random.normal(), np.random.shuffle() 等)。

通过控制种子,你能在“随机”和“可复现”之间灵活切换!

2.2.3.6 高级构造方法

(1) np.loadtxt

Python
data = np.loadtxt('data.txt')  # 读取文本文件

(2) np.genfromtxt

Python
data = np.genfromtxt('data.csv', delimiter=',')  # 支持复杂格式

2.2.3.7 创建方法推荐场景

场景

推荐方法

优点

快速初始化全0/全1数组

np.zeros/np.ones

内存预分配,明确值

生成数值序列

np.arange/np.linspace

灵活控制范围和步长

创建单位矩阵或对角矩阵

np.eye/np.diag

数学运算专用

高性能预分配内存

np.empty

速度最快(需手动初始化)

随机数据生成

np.random 模块

模拟实验数据

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

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

相关文章

考研数据结构Part1——单链表知识点总结

一、前言单链表是线性表的链式存储结构&#xff0c;作为数据结构中最基础也是最重要的线性结构之一&#xff0c;在考研数据结构科目中占有重要地位。本文将总结带头结点单链表的各项基本操作&#xff0c;包括初始化、插入、删除、查找等&#xff0c;并附上完整C语言实现代码&am…

笔试——Day15

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码第一题 题目 平方数 思路 判断⼀个数开根号之后左右两个数的平⽅&#xff0c;哪个最近即可 代码 第二题 题目&#xff1a; 分组 思路 枚举所有的结果&#xff0c;找到第一个复合要…

物联网全流程开发记录

问题 有数据采集设备&#xff0c;服务器&#xff0c;上位机用户显示三部分&#xff0c;采集设备将采集的数据发送至服务器。服务器将数据保存&#xff0c;上位机读取服务器保存的数据库显示。当出现多设备&#xff0c;多用户时&#xff0c;如何通过多设备对应多用户&#xff0c…

【LeetCode 热题 100】46. 全排列——回溯

Problem: 46. 全排列 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(N * N!)空间复杂度&#xff1a;O(N)整体思路 这段代码旨在解决一个经典的组合数学问题&#xff1a;全排列 (Permutations)。给定一个不含重复数字的数组 nums&#xff0c;它需要找出其所有可能…

AXI接口学习

amba总线的发展axi协议是两个接口之间的点对点的协议&#xff0c;主要是有5个通道。主机在写地址&#xff08;AW&#xff09;通道上发送地址&#xff0c;并在写数据&#xff08;W&#xff09;通道上将数据传输到从机。从机将接收到的数据写入指定地址空间。从机完成写操作&…

Validation - Spring Boot项目中参数检验的利器

Validation - Spring Boot项目中参数检验的利器 什么是Validation Sping Boot官方原文&#xff1a;When it comes to validating user input, Spring Boot provides strong support for this common, yet critical, task straight out of the box.Although Spring Boot support…

云服务器VS虚拟主机:如何抉择?

开篇引入在当今数字化浪潮中&#xff0c;无论是个人站长想要搭建独具风格的博客&#xff0c;展示自己的生活感悟与专业见解&#xff1b;还是中小企业期望构建官方网站&#xff0c;拓展线上业务版图&#xff0c;提升品牌知名度&#xff1b;亦或是大型互联网企业筹备高并发的电商…

不同相机CMOS噪点对荧光计算的影响

摘要&#xff1a;荧光成像是生物医学、材料科学等领域的重要研究手段&#xff0c;其成像质量高度依赖传感器噪声特性。本文系统分析CMOS传感器噪声类型及其对荧光信号计算的影响机制&#xff0c;结合实验数据探讨不同CMOS架构的噪声表现差异&#xff0c;提出针对性优化策略。研…

docker 常见命令使用记录

1. swarm 集群 1. 集群创建 # 创建集群管理节点&#xff0c; --advertise-addr 指定节点管理通信地址&#xff0c;--data-path-addr 指定容器通信地址 docker swarm init --advertise-addr 1.14.138.35 --data-path-addr 1.14.138.35# --advertise-addr 指明当前work节点的…

KRaft 角色状态设计模式:从状态理解 Raft

这些状态类是 Raft 协议行为的核心载体。它们包含转移逻辑 和 节点在特定状态下的所有行为和数据。QuorumState它是 KRaft 客户端实现中状态管理的核心&#xff0c;扮演着“状态机上下文&#xff08;Context&#xff09;”和“状态转换协调者”的关键角色。QuorumState 是整个 …

Linux的磁盘存储管理实操——(上)

一、Linux的设备文件分类 Linux的设备文件分类1、在Linux系统中设备文件是用来与外接交互的接口&#xff0c;它将内核中的硬件设备与文件系统关联起来&#xff0c;让用户可以像操作普通文件一样来操作硬件设备&#xff0c;同时也为开发者提供了方便而强大的应用程序接口。 2、L…

内核bpf的实现原理

bpftrace能帮我们干什么&#xff1f;1、统计 tcp连接的生命时长、2、统计mysql执行一条sql语句的时间3、统计redis执行命令的时间、 4、对文件进行一次读或者写的时间。 常用命令&#xff1a; bpftrace -e Begin { printf("hello\n"); } bpftrace -l *enter_accep…

前端npm配置Nexus为基础仓库

步骤&#xff1a; 一、Nexus仓库配置 新增npm仓库,具体详解见 Nexus私有仓库配置&#xff0c;解释 注&#xff1a;Nexus的版本需要至少3.38以上&#xff0c;不然会出现npm install 时npm的审计功能报错&#xff0c;导致install失败。虽然在3.38以后不会报400错误&#xff0c…

数据结构 之 【排序】(直接插入排序、希尔排序)

目录 1.直接插入排序 1.1直接插入排序的思想 1.2直接插入排序的代码逻辑&#xff1a; 1.3 直接插入排序图解 1.4单趟排序代码(单个元素的排序逻辑) 1.5完整排序代码 1.6直接插入排序的时间复杂度与空间复杂度 1.7直接插入排序的优势 2.希尔排序(缩小增量排序) 2.1…

Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙

Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙一顿操作猛如虎&#xff0c;一看结果250&#xff0c;必须记录&#xff0c;必须记录&#xff0c;&#xff01;今天弄了很久关于我们2023年的产品系统蜻蜓T会议系统专业版&#xff0c;然后终于搞好了密码也重…

Newline全场景方案闪耀2025中国智慧生活大会

7月15日 — 16日&#xff0c;由中国电子视像行业协会等权威机构指导的2025 CIC中国智慧生活大会在京召开。Newline作为视像协会PID分会副会长单位携全场景智慧办公解决方案亮相&#xff0c;首席营销官李宇鹏受邀出席领袖圆桌环节&#xff0c;与腾讯云、京东方、创维、TCL、小猿…

Edge浏览器地址栏默认搜索引擎设置指南

前言 Microsoft Edge 浏览器允许用户自定义地址栏默认搜索引擎&#xff0c;只是设置入口隐藏比较深&#xff0c;以版本 137.0.3296.83 (正式版本) (64 位)为例详细记录设置地址栏默认搜索引擎步骤&#xff1a; Edge 设置默认搜索引擎步骤 通过设置界面修改 打开Edge设置&#x…

Python eval函数详解 - 用法、风险与安全替代方案

Python eval函数详解 - 用法、风险与安全替代方案在Python中&#xff0c;eval() 是一个内置函数&#xff0c;用于解析并执行传入的字符串形式的表达式。它能够将字符串动态地转换为有效的Python代码并运行。虽然 eval() 功能强大&#xff0c;但其使用也伴随着潜在的安全风险。本…

Webpack5 新特性与详细配置指南

一、Webpack5 新特性 内置 Asset Modules&#xff08;资源模块&#xff09; 替代 file-loader、url-loader、raw-loader 等&#xff0c;统一资源处理方式。四种类型&#xff1a;asset/resource&#xff1a;导出文件 URL&#xff08;等同 file-loader&#xff09;。asset/inli…

笼子在寻找一只鸟:解读生活的隐形陷阱

想象一个闪闪发光的笼子&#xff0c;敞开着门&#xff0c;在世界中游荡&#xff0c;寻找一只鸟儿。这画面是不是有点奇怪&#xff1f;这是卡夫卡的格言“一个笼子在寻找一只鸟”带给我们的奇思妙想。通常&#xff0c;鸟儿自由翱翔&#xff0c;笼子静静等待&#xff0c;但卡夫卡…