人工智能之数据分析 numpy:第四章 数组属性和数据类型

人工智能之数据分析 numpy

第四章 数组属性和数据类型


文章目录

  • [人工智能之数据分析 numpy](#人工智能之数据分析 numpy)
  • 前言
  • [一、NumPy 数组的核心属性](#一、NumPy 数组的核心属性)
    • [1. `ndim`:数组的维度数(轴的数量)](#1. ndim:数组的维度数(轴的数量))
    • [2. `shape`:数组在每个维度上的大小(元组)](#2. shape:数组在每个维度上的大小(元组))
    • [3. `size`:数组中元素的总个数](#3. size:数组中元素的总个数)
    • [4. `dtype`:数组元素的数据类型](#4. dtype:数组元素的数据类型)
    • [5. `itemsize`:每个元素占用的字节数](#5. itemsize:每个元素占用的字节数)
    • [6. `nbytes`:整个数组占用的总字节数(= size × itemsize)](#6. nbytes:整个数组占用的总字节数(= size × itemsize))
    • [7. `data`:底层数据的内存地址(一般不直接使用)](#7. data:底层数据的内存地址(一般不直接使用))
  • [二、NumPy 数据类型(dtype)](#二、NumPy 数据类型(dtype))
    • [1. 常见 dtype 类型](#1. 常见 dtype 类型)
    • [2. 指定 dtype 创建数组](#2. 指定 dtype 创建数组)
    • [3. 查看和修改 dtype](#3. 查看和修改 dtype)
    • [4. 自定义结构化 dtype(用于记录型数据)](#4. 自定义结构化 dtype(用于记录型数据))
  • 三、数据类型字符串表示(简写)
  • [四、dtype 的属性(了解即可)](#四、dtype 的属性(了解即可))
  • 五、注意事项与最佳实践
  • [六、小结表:常用属性与 dtype 对照](#六、小结表:常用属性与 dtype 对照)
  • 后续
  • 资料关注

前言

NumPy 的 ndarray(N 维数组) 不仅是一个高效的多维容器,还具有丰富的属性 和灵活的​数据类型(dtype)系统​。理解这些内容对于高效使用 NumPy 至关重要。


一、NumPy 数组的核心属性

创建一个示例数组:

python 复制代码
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)

1. ndim:数组的维度数(轴的数量)

python 复制代码
print(arr.ndim)  # 输出:2

2. shape:数组在每个维度上的大小(元组)

python 复制代码
print(arr.shape)  # 输出:(2, 3) → 2行3列

3. size:数组中元素的总个数

python 复制代码
print(arr.size)  # 输出:6(= 2 × 3)

4. dtype:数组元素的数据类型

python 复制代码
print(arr.dtype)  # 输出:float32

5. itemsize:每个元素占用的字节数

python 复制代码
print(arr.itemsize)  # 输出:4(因为 float32 占 4 字节)

6. nbytes:整个数组占用的总字节数(= size × itemsize)

python 复制代码
print(arr.nbytes)  # 输出:24(6 × 4)

7. data:底层数据的内存地址(一般不直接使用)

python 复制代码
print(arr.data)  # <memory at 0x...>

⚠️ 注意:data 属性返回的是缓冲区对象,不是实际数据内容。要访问数据,请直接使用数组本身。


二、NumPy 数据类型(dtype)

NumPy 支持比 Python 原生更丰富、更精确的数值类型,尤其适合科学计算。

1. 常见 dtype 类型

类型名 描述 对应 C 类型 示例
bool_ 布尔值(True/False) bool np.bool_
int8,int16,int32,int64 有符号整数 char, short, int, long long np.int32
uint8,uint16,uint32,uint64 无符号整数 unsigned char 等 np.uint8
float16,float32,float64 浮点数 half, float, double np.float64(默认)
complex64,complex128 复数 float + float i, double + double i np.complex128

💡 在大多数系统上:

  • np.int_np.int64(64 位系统)
  • np.float_np.float64

2. 指定 dtype 创建数组

python 复制代码
a = np.array([1, 2, 3], dtype='int32')
b = np.zeros(5, dtype=np.float64)
c = np.array([1.5, 2.7], dtype=np.float32)

3. 查看和修改 dtype

  • 查看

    python 复制代码
    print(a.dtype)  # int32
  • **转换(返回新数组)**:

    python 复制代码
    d = a.astype(np.float64)
    print(d.dtype)  # float64

⚠️ astype() 会创建副本,除非 dtype 相同。

4. 自定义结构化 dtype(用于记录型数据)

适用于类似表格或结构体的数据:

python 复制代码
dt = np.dtype([('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
people = np.array([('Alice', 25, 55.5), ('Bob', 30, 70.0)], dtype=dt)

print(people['name'])    # ['Alice' 'Bob']
print(people[0]['age'])  # 25
  • 'U10' 表示 Unicode 字符串,最多 10 个字符
  • 'i4' 表示 4 字节整数(即 int32)
  • 'f4' 表示 4 字节浮点数(float32)

三、数据类型字符串表示(简写)

NumPy 允许使用字符串简写指定 dtype:

字符串 含义
'i4' 32 位整数
'f8' 64 位浮点数
'U10' 最大长度为 10 的 Unicode 字符串
'bool' 布尔值
'c8' 64 位复数(两个 32 位浮点)

示例:

python 复制代码
x = np.array([1, 2], dtype='f4')  # 等价于 np.float32

四、dtype 的属性(了解即可)

python 复制代码
t = np.dtype('float64')
print(t.name)      # 'float64'
print(t.itemsize)  # 8
print(t.kind)      # 'f'(f=float, i=int, U=unicode string, b=bool 等)

常见 kind 值:

  • 'b': boolean
  • 'i': signed integer
  • 'u': unsigned integer
  • 'f': floating-point
  • 'c': complex floating-point
  • 'U': Unicode string
  • 'O': Python object

五、注意事项与最佳实践

  1. 避免不必要的 dtype 转换 :频繁 astype() 会降低性能。

  2. 内存效率 :使用合适精度的类型(如用 float32 代替 float64 可节省 50% 内存)。

  3. 整数溢出 :注意 int8 范围是 -128~127,超出会回绕(不报错!)。

    python 复制代码
    x = np.array([127], dtype='int8')
    print(x + 1)  # [-128] ← 溢出!
  4. 默认 dtype

    • 整数列表 → int64(64 位系统)
    • 浮点列表 → float64
    • 混合(如 [1, 2.0])→ float64

六、小结表:常用属性与 dtype 对照

属性/操作 说明
arr.ndim 维度数量
arr.shape 各维度大小
arr.size 元素总数
arr.dtype 数据类型
arr.itemsize 单个元素字节数
arr.astype(new_dtype) 类型转换
np.dtype([...]) 自定义结构化类型

在处理图像(常用 uint8)、深度学习(常用 float32)或金融数据(需高精度 float64),选择合适的 dtype 能显著提升性能和内存效率。

后续

部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
锋行天下1 天前
公司内网部署大模型的探索之路
前端·人工智能·后端
背心2块钱包邮1 天前
第7节——积分技巧(Integration Techniques)-代换积分法
人工智能·python·深度学习·matplotlib
无心水1 天前
【分布式利器:大厂技术】4、字节跳动高性能架构:Kitex+Hertz+BytePS,实时流与AI的极致优化
人工智能·分布式·架构·kitex·分布式利器·字节跳动分布式·byteps
阿正的梦工坊1 天前
DreamGym:通过经验合成实现代理学习的可扩展化
人工智能·算法·大模型·llm
湘-枫叶情缘1 天前
人脑生物芯片作为“数字修炼世界”终极载体的技术前景、伦理挑战与实现路径
人工智能
一个散步者的梦1 天前
一键生成数据分析报告:Python的ydata-profiling模块(汉化)
python·数据挖掘·数据分析
Aaron15881 天前
侦察、测向、识别、干扰一体化平台系统技术实现
人工智能·fpga开发·硬件架构·边缘计算·信息与通信·射频工程·基带工程
维维180-3121-14551 天前
作物模型的未来:DSSAT与机器学习、遥感及多尺度模拟的融合
人工智能·生态学·农业遥感·作物模型·地理学·农学
阿杰学AI1 天前
AI核心知识38——大语言模型之Alignment(简洁且通俗易懂版)
人工智能·安全·ai·语言模型·aigc·ai对齐·alignment
xier_ran1 天前
关键词解释:对比学习(Contrastive Learning)
人工智能·深度学习·学习·机器学习·对比学习