展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > Python使用NumPy创建数组的完全指南

Python使用NumPy创建数组的完全指南

NumPy数组与Python列表本质不同,支持向量化运算与广播机制。创建可用array、zeros、ones、arange、random等函数。数组属性有维度数、形状、大小、数据类型。切片返回视图需用copy隔离。reshape改变形状,newaxis增加维度。拼接用concatenate/vstack/hstack,分割用split。还支持普通、布尔及花式

NumPy数组创建指南

六月的风带着点甜味,朋友圈被各种童真刷屏。趁着这个万物皆可“玩”的季节,咱们也来玩点硬核的——用NumPy搭积木。说真的,NumPy的数组和乐高没什么本质区别:都是用最简单的单元,拼出你想得到的一切。

Python使用NumPy创建数组的完全指南

为什么要学NumPy?

如果把机器学习比作精彩的冒险旅程,那 NumPy 就是出发前必学的基础技能课,缺一不可。

写Python处理数据,你大概率会遇到这行“神咒”:

import numpy as np

为什么绕不开它?两个字:

  • 向量化运算:告别for循环,一行代码干完十行的活
  • 广播机制:形状不同的数组也能直接算,Python原生列表做不到

今天这篇,从数组创建变形运算,一次性把NumPy的基础打扎实——地基稳了,后面盖楼才不慌。

一、np.array:从列表到数组,一步之遥

最直觉的方式,把一个Python列表扔进去:

arr = np.array([1, 2, 3])
print(arr)  # [1 2 3]

等等,Python列表[1, 2, 3]不也能用吗?为什么要多此一举?

因为它们压根不是一回事:

Python列表 NumPy数组
类型 来者不拒,int、str、dict混着装 认死理,一个数组只认一种类型
运算 [1,2]+[3,4][1,2,3,4](拼接) np.array([1,2])+np.array([3,4])[4 6](逐元素加)
速度 循环处理,慢 底层C实现,快到飞起
# Python列表:+ 是拼接
[1, 2, 3] + [4, 5, 6]  # [1, 2, 3, 4, 5, 6]

# NumPy数组:+ 是数学运算
np.array([1, 2, 3]) + np.array([4, 5, 6])  # [5 7 9]

一个管“装东西”,一个管“算东西”。功能不同,别混为一谈。

二、嵌套列表:给积木加个维度

一维数组是条线,二维是张表,三维就是个箱子。用嵌套列表可以一层层搭上去:

list1 = [list(range(i, i+3)) for i in [2, 4, 6]]
print(list1)
# [[2, 3, 4], [6, 7, 8], [10, 11, 12]]

c = np.array([range(i, i+3) for i in [2, 4, 6]])
print(c)
# [[ 2  3  4]
#  [ 6  7  8]
#  [10 11 12]]

每一层列表就是积木的一层,叠起来就成了立体结构。道理就这么朴素。

三、快速创建:NumPy的“模板工厂”

有些数组不需要你一个个填值——全0、全1、等差数列,NumPy早就帮你备好了模板。

np.zeros:全0数组

nz = np.zeros(10, dtype=int)
print(nz)  # [0 0 0 0 0 0 0 0 0 0]

十个零,整整齐齐。dtype=int让它输出整数而不是浮点数。

np.ones:全1数组

no = np.ones((3, 5))
print(no)
# [[1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1.]]

3行5列,默认浮点型(1.不是1)。需要整型就加dtype=int

np.arange:等差数列

和Python的range是亲兄弟,但直接返回NumPy数组:

na = np.arange(0, 20, 2)
print(na)  # [ 0  2  4  6  8 10 12 14 16 18]

对比一下:

list(range(0, 20, 2))  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] ← 列表
np.arange(0, 20, 2)    # [ 0  2  4  6  8 10 12 14 16 18] ← 数组

长得像,但底层完全不同。一个是Python对象,一个是NumPy的连续内存块。

四、随机数组:开盲盒时间

随机数是NumPy里最好玩的部分——你永远不知道下一个数是什么(除非你设了种子)。

基础随机

a1 = np.random.random()           # 一个[0,1)的随机浮点数
a2 = np.random.random(1)          # 包含一个元素的数组
a3 = np.random.random((3, 3))     # 3×3的随机数组
a4 = np.random.random((2, 3, 4))  # 2层×3行×4列,三维随机数组

指定范围

a5 = np.random.uniform(5, 7, (2, 2))  # [5,7)之间的随机浮点,2×2
a6 = np.random.randint(5, 7, (2, 2))  # [5,7)之间的随机整数,2×2

uniform管浮点,randint管整数,参数格式一样。

正态分布

正态分布的本质:大部分数据挤在中间,越往两头越稀疏。人的身高、考试成绩、测量误差,都近似这个分布。

# 均值0,标准差1,3×3的正态分布随机数组
np.random.normal(0, 1, (3, 3))

# 简写版:标准正态分布
np.random.randn(3, 3)

种子:给随机数写剧本

随机数其实是“伪随机”——由算法按固定规则生成。设种子就是把规则锁死,让每次运行结果一模一样。

np.random.seed(0)
a = np.random.random(3)
print(a)  # 每次运行都输出相同的值

什么时候用?调试的时候。你的代码出了bug,想复现它,就得保证输入数据不变。种子就是你的“存档点”。

五、特殊数组:预制件

np.eye:单位矩阵

ne = np.eye(3)
print(ne)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

对角线是1,其余是0。线性代数里的“乘法单位元”——任何矩阵乘以它,等于没乘。

np.empty:未初始化的数组

ney = np.empty(3)
print(ney)  # 值是内存里的残留,不确定

像开盲盒——你不知道里面是什么。但它创建速度极快,因为跳过了初始化步骤。适合你确定后面会逐个赋值的场景。

六、数组属性:读懂你的积木

数组创建好了,怎么了解它?看属性:

x = np.random.randint(10, size=(3, 4, 5))  # 3层×4行×5列
属性 含义 本例值
ndim 维度数 3
shape 各维度大小 (3, 4, 5)
size 元素总数 60
dtype 数据类型 int64
itemsize 单个元素占的字节数 8
nbytes 总字节数 480
print('维度:', x.ndim)       # 3
print('形状:', x.shape)      # (3, 4, 5)
print('大小:', x.size)       # 60
print('类型:', x.dtype)      # int64

nbytes = itemsize × size,记住这个关系就行。

七、切片:精准取值,小心副作用

切片是NumPy最常用的操作之一,但有个坑:切片返回的是视图,不是副本

x = np.array([[3, 5, 2, 4],
              [7, 6, 8, 8],
              [1, 6, 7, 7]])

x_sub = x[:2, :2]  # 前两行、前两列
print(x_sub)
# [[3 5]
#  [7 6]]

视图的意思是:你改切片,原数组也跟着变。

x_sub[0, :] = 9
print(x_sub)  # [[9 9] [7 6]]
print(x)      # 原数组也被改了!
# [[9 9 2 4]
#  [9 9 8 8]
#  [1 6 7 7]]

这就像你通过窗户看房间——你在窗外摆了个花瓶,房间里也多了一个。

想独立操作?用.copy()

x_sub_copy = x[:2, :2].copy()
x_sub_copy[0, :] = 1
print(x)             # 原数组不受影响
print(x_sub_copy)    # 副本独立变化

拍了张照片,照片里的改动不会影响真实的房间。

八、变形:reshape与newaxis

reshape:改变形状,不改内容

grid = np.arange(1, 10)           # [1 2 3 4 5 6 7 8 9]
grid_reshape = grid.reshape((3, 3))
print(grid_reshape)
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

9个元素可以排成3×3,但排不成4×3——元素总数必须不变

np.newaxis:增加一个维度

把一维变二维,本质是用None插入一个长度为1的维度:

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

# 变成一行(1×5)
x.reshape(1, 5)       # [[1 2 3 4 5]]
x[np.newaxis, :]      # 效果一样

# 变成一列(5×1)
x.reshape(5, 1)       # [[1] [2] [3] [4] [5]]
x[:, np.newaxis]      # 效果一样

什么时候用?做矩阵运算需要对齐维度的时候。比如一个(5,)的向量要和一个(3,5)的矩阵运算,得先把向量变成(1,5)。

九、拼接与分裂:合体与分身

拼接:多个变一个

x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
z = np.array([99, 99, 99])

# 一维拼接
np.concatenate([x, y, z])  # [ 1  2  3  3  2  1 99 99 99]

二维数组要指定方向:

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

# axis=0:上下叠(行方向)
np.concatenate([grid, grid])
# [[1 2 3]
#  [4 5 6]
#  [1 2 3]
#  [4 5 6]]

# axis=1:左右拼(列方向)
np.concatenate([grid, grid], axis=1)
# [[1 2 3 1 2 3]
#  [4 5 6 4 5 6]]

还有两个快捷函数:

np.vstack([x, y, z, grid])  # 垂直栈,等价于axis=0
np.hstack([grid, grid])      # 水平栈,等价于axis=1

分裂:一个变多个

x = [0, 1, 2, 3, 4, 5, 6, 7, 8]
x1, x2, x3 = np.split(x, [3, 5])
print(x1, x2, x3)  # [0 1 2] [3 4] [5 6 7 8]

规则:np.split(数组, [断点列表]),N个断点切出N+1段。

二维的分裂:

grid = np.arange(16).reshape(4, 4)

# 垂直切:按行分
upper, lower = np.vsplit(grid, [2])

# 水平切:按列分
left, right = np.hsplit(grid, [1])

十、通用函数:向量化的魔法

NumPy的运算不需要for循环,直接对整个数组操作——这就是向量化

x = np.arange(4)
print('x     =', x)
print('x + 5 =', x + 5)           # [5 6 7 8]
print('x - 5 =', x - 5)           # [-5 -4 -3 -2]
print('x * 2 =', x * 2)           # [0 2 4 6]
print('x / 2 =', x / 2)           # [0.  0.5 1.  1.5]
print('x // 2 =', x // 2)         # [0 0 1 1]  取商
print('x % 2 =', x % 2)           # [0 1 0 1]  取余
print('x ** 2 =', x ** 2)         # [0 1 4 9]  幂运算
print('-x     =', -x)              # [0 -1 -2 -3]

每种运算都有对应的函数版本:np.addnp.subtractnp.multiplynp.dividenp.power……

绝对值

x = np.array([-2, -1, 0, 1, 2])
print(np.abs(x))           # [2 1 0 1 2]
print(np.absolute(x))      # 效果一样

复数的模

y = np.array([3 - 4j, 4 - 3j, 2 + 0j, 0 + 1j])
print(abs(y))  # [5. 5. 2. 1.]

复数取绝对值返回的是——实部和虚部平方和再开根号。3-4j的模就是√(9+16)=5

小时候玩积木,一块一块往上垒,最后能搭出城堡、飞船、整个城市。现在玩NumPy,一个数组一个数组地创建、变形、拼接,最后能处理海量数据、训练模型、解决真实问题。

工具变了,本质没变:从最简单的单元出发,耐心搭建,直到看见全貌。

写在最后

回顾一下今天搭的“积木”:

  • 基础创建np.array 从列表一步到位,zeros/ones/arange 快速生成模板
  • 随机数组randomuniformnormal 各有用途,seed 是调试的存档点
  • 变形与操作reshape 改形状、切片取视图、拼接分裂玩组合
  • 向量化运算:告别 for 循环,一行代码搞定批量计算

数组创建是 NumPy 的起点,不是终点。上面的速查表可以收藏备用,接下来你可以继续探索:

  1. 索引与切片进阶 — 花式索引、布尔索引
  2. 广播机制 — 不同形状的数组如何对齐运算
  3. 线性代数 — 矩阵乘法、特征值分解
  4. 实战项目 — 用 NumPy 做图像处理、数据分析

速查表

场景 函数 一句话说明
从列表创建 np.array() 最基础,什么都往里塞
全零 np.zeros() 初始化占位
全一 np.ones() 同上
等差数列 np.arange() 类似range,但返回数组
随机浮点 np.random.random() [0,1)区间
指定范围随机 np.random.uniform() 自定义区间
随机整数 np.random.randint() 整数版
正态分布 np.random.normal() 高斯分布
固定种子 np.random.seed() 让随机不随机
单位矩阵 np.eye() 对角线1,其余0
未初始化 np.empty() 快,但值不确定
变形 reshape 改形状不改内容
加维度 np.newaxis 一维变二维
拼接 concatenate/vstack/hstack 合体
分裂 split/vsplit/hsplit 分身
本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。