当前位置: 首页 > news >正文

Python 数据科学与可视化工具箱 (一) - 数组属性:`shape`, `dtype`, `ndim`, `size`

在前文中,我们学习了如何创建 NumPy 数组。创建数组只是第一步,要高效地操作和理解这些数组,你必须先了解它们的核心属性。这些属性就像是数组的“身份证”,详细描述了它的结构和内容。本篇将重点介绍 NumPy 数组最常用的四个属性:shape, dtype, ndim, 和 size


1. 为什么数组属性如此重要?

在处理数据时,你经常需要知道数据的维度、大小和类型,以便进行正确的计算和转换。例如:

  • 形状 (shape):你想对两个矩阵进行乘法运算,你必须先确认它们的形状是否符合乘法规则。
  • 数据类型 (dtype):你想计算一个数组的平均值,你需要知道它是否由数字组成,而不是字符串。
  • 维数 (ndim):你想将一个三维的图像数据展平为一维,你需要知道它的维数。
  • 总大小 (size):你想评估一个数组占用的内存大小,你需要知道它包含多少个元素。

掌握这些属性,能让你在数据处理中做到心中有数,避免许多常见的错误。


2. NumPy 数组核心属性详解

我们将通过一系列示例来深入了解这四个属性。

2.1 shape:数组的形状

shape 属性是一个元组,它告诉你在数组的每一个维度上,有多少个元素。元组的长度等于数组的维数 (ndim)。

  • 功能: 表示数组在每个轴上的大小。
  • 类型: 元组 (d1, d2, ..., dn),其中 d_id\_id_i 是第 iii 维的大小。

示例与说明:

import numpy as np# 一维数组 (向量)
arr1d = np.array([1, 2, 3, 4, 5])
print("一维数组:", arr1d)
print("形状 (shape):", arr1d.shape) # 输出: (5,)
# 只有一个维度,大小为 5。元组中的逗号表示它是一个单元素元组。# 二维数组 (矩阵)
arr2d = np.array([[10, 11, 12], [13, 14, 15]])
print("\n二维数组:\n", arr2d)
print("形状 (shape):", arr2d.shape) # 输出: (2, 3)
# 两个维度:第一个维度有 2 行,第二个维度有 3 列。# 三维数组
arr3d = np.arange(1, 28).reshape(3, 3, 3)
print("\n三维数组:\n", arr3d)
print("形状 (shape):", arr3d.shape) # 输出: (3, 3, 3)
# 三个维度:3 个“页” (blocks),每个页有 3 行,每行有 3 列。# shape 的灵活运用:重塑 (Reshaping)
# shape 属性本身是不可变的,但你可以使用 `reshape()` 方法来改变数组的形状。
arr = np.arange(12)
print("\n原始数组 (12个元素):", arr)
arr_reshaped = arr.reshape((3, 4))
print("重塑为 3x4 矩阵:\n", arr_reshaped)
print("新形状:", arr_reshaped.shape)
# 注意:重塑时新旧数组的元素总数必须相同 (12 = 3 * 4)。
# 重塑时,可以使用 -1 作为某个维度的大小,NumPy 会自动计算它。
arr_auto_reshaped = arr.reshape((2, -1))
print("自动计算形状 (2x6):\n", arr_auto_reshaped)
print("新形状:", arr_auto_reshaped.shape)

shape 是数据处理和算法设计中最关键的属性之一。

2.2 dtype:数组的数据类型

dtype 属性描述了数组中元素的数据类型。因为 ndarray 是同质的,所有元素都必须是相同类型。NumPy 支持比标准 Python 类型更丰富的数值类型,例如 int8, int32, float64, bool_ 等,这使得内存使用更高效,计算更精确。

  • 功能: 表示数组中每个元素的数据类型。
  • 类型: numpy.dtype
http://www.lryc.cn/news/606167.html

相关文章:

  • day28_2025-07-31
  • Valgrind终极指南:深入内存安全与性能瓶颈检测
  • 进程控制:从创建到终结的完整指南
  • 解决音视频开发中 因mp4中断 无法播放的问题
  • [特殊字符] 数据可视化结合 three.js:让 3D 呈现更精准,3 个优化经验谈
  • 前端框架Vue3(三)——路由和pinia
  • RabbitMQ安装与介绍
  • Disruptor高性能基石:Sequence并发优化解析
  • 去重、top_n()、pull()、格式化
  • 数据结构第4问:什么是栈?
  • BR/EDR PHY帧结构及其具体内容
  • 51c自动驾驶~合集12
  • python基础语法3,组合数据类型(简单易上手的python语法教学)(课后习题)
  • 从0到1了解热部署
  • 一天两道力扣(7)
  • 力扣 hot100 Day61
  • 银河麒麟桌面操作系统:自定义截图快捷键操作指南
  • 机器人学和自动化领域中的路径规划方法
  • 解决Git升级后出现的问题
  • 国产芯+单北斗防爆终端:W5-D防爆智能手机,助力工业安全通信升级
  • 将开发的软件安装到手机:环境配置、android studio设置、命令行操作
  • ClickHouse vs PostgreSQL:数据分析领域的王者之争,谁更胜一筹?
  • 2683. 相邻值的按位异或
  • USRP捕获手机/路由器数据传输信号波形(中)
  • DeepCompare文件深度对比软件:智能差异分析与可视化功能深度解析
  • visual studio 安装总结
  • 搭建文件共享服务器samba————附带详细步骤
  • Kubernetes (K8s) 部署Doris
  • Redis过期策略
  • 【嵌入式电机控制#23】BLDC:开环运动控制框架