0

0

NumPy数组形状深度解析:理解维度与创建多维数组

DDD

DDD

发布时间:2025-11-21 15:43:02

|

864人浏览过

|

来源于php中文网

原创

NumPy数组形状深度解析:理解维度与创建多维数组

本文深入探讨numpy数组的维度与形状,重点解析一维数组 `(n,)` 与二维数组 `(1, n)` 之间的关键区别,并通过代码示例演示如何基于输入结构准确创建不同维度的数组。同时,文章还将介绍两种实用的数组形状转换技巧,帮助读者更灵活地处理数据维度。

在NumPy中,数组的形状(shape)和维度(ndim)是理解其数据结构的核心概念。shape 属性返回一个元组,表示数组在每个维度上的大小,而 ndim 属性则表示数组的维度数量。正确理解这两个概念对于高效地进行数据处理和科学计算至关重要。

一维数组的创建与形状:(N,) 的含义

当我们使用一个扁平的Python列表创建NumPy数组时,NumPy会将其解释为一维数组。例如,np.array([7, 1]) 创建的数组,其 shape 为 (2,),表示它是一个包含两个元素的一维数组。这里的逗号表示这是一个包含一个元素的元组,即数组只有一个维度,其长度为2。

import numpy as np

# 创建一个一维数组
b_1d = np.array([7, 1], dtype=np.dtype(float))

print(f"数组 b_1d: {b_1d}")
print(f"b_1d 的形状 (shape): {b_1d.shape}") # 输出: (2,)
print(f"b_1d 的维度数量 (ndim): {b_1d.ndim}") # 输出: 1

从输出可以看出,b_1d 是一个真正的1D数组,其 ndim 为1。它不是一个一行两列的二维数组,而是一个简单的数据序列。

创建高维数组:嵌套列表的关键作用

要创建更高维度的NumPy数组,关键在于输入Python列表的嵌套层级。NumPy根据列表的嵌套深度来推断数组的维度。

创建二维数组:(1, N)

如果希望创建一个具有一行N列的二维数组,需要使用一个包含单个列表的嵌套列表。例如,np.array([[7, 1]]) 会被解释为一个二维数组。

# 创建一个二维数组(一行两列)
b_2d = np.array([[7, 1]], dtype=np.dtype(float))

print(f"数组 b_2d: {b_2d}")
print(f"b_2d 的形状 (shape): {b_2d.shape}") # 输出: (1, 2)
print(f"b_2d 的维度数量 (ndim): {b_2d.ndim}") # 输出: 2

这里,b_2d 的 shape 为 (1, 2),明确表示它是一个2D数组,包含1行和2列。

创建三维数组:(1, 1, N)

依此类推,要创建三维数组,需要更深层次的列表嵌套。

# 创建一个三维数组
b_3d = np.array([[[7, 1]]], dtype=np.dtype(float))

print(f"数组 b_3d: {b_3d}")
print(f"b_3d 的形状 (shape): {b_3d.shape}") # 输出: (1, 1, 2)
print(f"b_3d 的维度数量 (ndim): {b_3d.ndim}") # 输出: 3

灵活转换数组形状的技巧

在实际应用中,我们可能需要将已创建的数组从一个维度转换为另一个维度,例如将一维数组转换为二维数组。NumPy提供了多种灵活的方法来实现这一点。

稿定AI绘图
稿定AI绘图

稿定推出的AI绘画工具

下载

方法一:直接修改 shape 属性

可以直接修改数组的 shape 属性来改变其形状。需要注意的是,这种方法会原地修改数组,并且新形状的元素总数必须与原数组相同。

b_original = np.array([7, 1], dtype=np.dtype(float))
print(f"原始数组 b_original: {b_original}, 形状: {b_original.shape}")

# 将形状修改为 (1, 2)
b_original.shape = (1, 2)
print(f"修改形状后的 b_original: {b_original}, 形状: {b_original.shape}")
# 输出:
# 原始数组 b_original: [7. 1.], 形状: (2,)
# 修改形状后的 b_original: [[7. 1.]], 形状: (1, 2)

此方法简洁高效,但仅适用于元素总数不变的形状转换。

方法二:使用 None 或 np.newaxis 增加维度

通过在索引操作中使用 None 或 np.newaxis,可以在指定位置插入一个新的维度。这通常会返回一个数组的视图(view),而不是修改原数组。

b_array = np.array([7, 1], dtype=np.dtype(float))
print(f"原始数组 b_array: {b_array}, 形状: {b_array.shape}")

# 在第一个维度前添加一个新维度,使其成为行向量 (1, 2)
b_reshaped_none = b_array[None, :]
print(f"使用 [None, :] 转换后的 b_reshaped_none: {b_reshaped_none}, 形状: {b_reshaped_none.shape}")

# 或者使用 np.newaxis 达到同样效果
b_reshaped_newaxis = b_array[np.newaxis, :]
print(f"使用 [np.newaxis, :] 转换后的 b_reshaped_newaxis: {b_reshaped_newaxis}, 形状: {b_reshaped_newaxis.shape}")

# 如果想在最后一个维度后添加新维度,使其成为列向量 (2, 1)
b_reshaped_col = b_array[:, None]
print(f"使用 [:, None] 转换后的 b_reshaped_col (列向量): {b_reshaped_col}, 形状: {b_reshaped_col.shape}")
# 输出:
# 原始数组 b_array: [7. 1.], 形状: (2,)
# 使用 [None, :] 转换后的 b_reshaped_none: [[7. 1.]], 形状: (1, 2)
# 使用 [np.newaxis, :] 转换后的 b_reshaped_newaxis: [[7. 1.]], 形状: (1, 2)
# 使用 [:, None] 转换后的 b_reshaped_col (列向量): [[7.], [1.]], 形状: (2, 1)

这种方法非常灵活,可以精确控制新维度的插入位置,且通常不涉及数据复制,效率较高。

总结

深入理解NumPy如何根据输入列表的嵌套层级来推断数组维度至关重要。一个长度为 N 的一维数组其形状为 (N,),而一个具有一行 N 列的二维数组其形状为 (1, N)。这两者在概念和实际操作中有着本质的区别。

掌握直接修改 shape 属性和利用 None 或 np.newaxis 进行索引的技巧,能够帮助开发者在NumPy中灵活地控制数组的维度结构。这些技能在数据预处理、机器学习模型输入准备以及需要进行广播操作的场景中都非常有用,能够确保数据以正确的格式进行处理。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

746

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

634

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

758

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1260

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

3

2026.01.12

热门下载

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

精品课程

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

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

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

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