← 返回《Python 数据分析实战》
📑 查看全课大纲(第 28 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.D绘图 -- mplot3d
  82. 82.D曲线可视化
  83. 83.D散点图可视化
  84. 84.D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

多维数组

约 11 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

多维数组构造艺术:NumPy 常用创建方法、形状重构与类型转换精讲

小象实战讲义 · Python数据分析实战

在科学计算与数据分析任务中,构建合适维度与初值的多维数组是所有算法建模的第一步。无论是初始化全 0 的权重矩阵、生成等差的步长序列、构建随机模拟数据集,还是对现有矩阵的行和列进行重新排布(Reshape),NumPy 都提供了极其丰富、高性能的构造与变换工具。本节我们将全面掌握 NumPy 中多维数组创建函数族、**形状动态重塑机制(reshape数据类型强制转换(astype)**的高级实战技巧。

💡 核心导读

  • 四大核心创建函数族全景
    • 基于已有序列创建np.array()
    • 特殊固定值矩阵np.zeros()np.ones()np.full()np.eye()(单位矩阵);
    • 等差与线性序列生成器np.arange()(指定步长)与 np.linspace()(指定点数);
    • 随机数生成矩阵np.random.rand()(均匀分布)、randn()(标准正态分布)、randint()(整数)。
  • 形状重构(Reshape)的内在机制
    • 元素总数守恒定理;
    • 巧用 -1 自动推断未定轴维度;
    • 多维数组展平为一维向量(flatten()ravel() 视图与副本差异)。
  • 数据类型转换(astype:安全降级、浮点整型互转与字符串类型解析。

1. 数组创建函数族与参数规范

在 NumPy 中创建数组时,对于需要指定维度的函数(如 zerosonesfull),其首个参数必须是表示形状的元组(Tuple)

┌─────────────────────────────────────────────────────────────┐
│                    NumPy 数组常用创建函数速查表              │
├────────────────────┬────────────────────────────────────────┤
│ 函数语法           │ 功能说明与典型应用                     │
├────────────────────┼────────────────────────────────────────┤
│ np.array(list)     │ 从 Python 列表/嵌套列表转换为 ndarray  │
│ np.zeros((m, n))   │ 创建 m 行 n 列的全 0 浮点矩阵          │
│ np.ones((m, n))    │ 创建 m 行 n 列的全 1 浮点矩阵          │
│ np.full((m, n), 7) │ 创建 m 行 n 列且全填充为 7 的矩阵      │
│ np.arange(0, 10, 2)│ 生成 [0, 2, 4, 6, 8] 等差序列          │
│ np.linspace(0,1,5) │ 在 [0, 1] 闭区间内均匀生成 5 个分位点  │
│ np.eye(n)          │ 生成 n 阶对角线为 1 的单位方阵         │
└────────────────────┴────────────────────────────────────────┘

2. Python 代码实战:数组创建、随机数生成与类型转换

# 示例 1:演练各种常见的数组初始化方法与随机数矩阵

import numpy as np

# 1. 创建全 0 与全 1 矩阵 (注意:形状参数需传元组)
zeros_mat = np.zeros((2, 4), dtype=np.float64)
ones_mat = np.ones((3, 2), dtype=np.int32)
full_mat = np.full((2, 3), 99)

print("=== 1. 特殊值初始化矩阵 ===")
print("全 0 矩阵 (2x4):\n", zeros_mat)
print("全 1 矩阵 (3x2):\n", ones_mat)
print("常数填充矩阵 (2x3):\n", full_mat)

# 2. 等差序列:arange vs linspace
seq_arange = np.arange(1, 10, 2)  # 起始 1,结束 10 (左闭右开),步长 2
seq_linspace = np.linspace(0, 100, 5)  # 起始 0,结束 100 (闭区间),生成 5 个等分点

print("\n=== 2. 数值序列生成 ===")
print("arange 步长序列 [1, 10, 2):", seq_arange)
print("linspace 5 等分点 [0, 100]:", seq_linspace)

# 3. 随机数生成 (设置随机种子确保实验可复现)
np.random.seed(42)
rand_uniform = np.random.rand(2, 3)         # [0, 1) 均匀分布
rand_normal = np.random.randn(2, 3)          # 标准正态分布 (均值0, 方差1)
rand_ints = np.random.randint(10, 50, size=(2, 3)) # [10, 50) 整数矩阵

print("\n=== 3. 随机数生成矩阵 ===")
print("均匀分布随机矩阵:\n", np.round(rand_uniform, 3))
print("随机整数矩阵 (10~50):\n", rand_ints)

接下来,我们实操多维数组的形状重构(reshape)与数据类型转换(astype):

# 示例 2:数组形状重构 (reshape) 与数据类型转换 (astype)

# 1. 数组形状重构
raw_arr = np.arange(12)  # 生成 0 到 11 的 12 个数字
print("\n=== 4. 数组形状变换 (Reshape) ===")
print("原始 1 维向量 (12,):\n", raw_arr)

# 重构为 3 行 4 列的二维矩阵
mat_3x4 = raw_arr.reshape((3, 4))
print("重构为 3 行 4 列矩阵 (3, 4):\n", mat_3x4)

# 巧用 -1 自动推导列数 (设置为 2 行,列数由 NumPy 自动计算 12/2 = 6)
mat_auto = raw_arr.reshape((2, -1))
print("使用 -1 自动推导列数 (2, -1) -> 形状:", mat_auto.shape)

# 将多维矩阵重新展平为一维向量
flattened = mat_3x4.flatten()
print("展平后的向量:", flattened)

# 2. 数据类型转换 (astype)
float_arr = np.array([1.2, 3.8, 5.5, 7.1], dtype=np.float64)
int_arr = float_arr.astype(np.int32) # 浮点截断为整型

str_nums = np.array(["100", "250", "380"])
numeric_arr = str_nums.astype(np.float32) # 字符串数组解析为数值浮点

print("\n=== 5. 数据类型转换 (astype) ===")
print("浮点截断转整型:", int_arr, "| 类型:", int_arr.dtype)
print("字符串转浮点型:", numeric_arr, "| 类型:", numeric_arr.dtype)

📝 动手练一练

  1. 原理思考题:在对包含 24 个元素的一维数组执行 arr.reshape((4, -1)) 时,NumPy 是如何确定第二维的具体大小的?如果执行 arr.reshape((5, -1)) 会发生什么?

    👉 点击查看参考答案

    参考答案: ① 计算规则:NumPy 根据元素总数守恒定理,用总元素个数除以已知轴的长度:$24 \div 4 = 6$,因此第二维自动计算为 6; ② 异常情况:$24 \div 5 = 4.8$,无法整除。NumPy 会立即抛出 ValueError: cannot reshape array of size 24 into shape (5,newaxis) 错误。

  2. 编程练习:编写一段代码,生成一个 4 行 4 列的对角线为 1 的单位方阵,并将其元素类型从默认的 float64 转换为 int32

    👉 点击查看参考答案

    参考答案

    import numpy as np
    
    identity_matrix = np.eye(4, dtype=np.int32)
    print("=== 4阶整型单位矩阵 ===")
    print(identity_matrix)
    print("数据类型:", identity_matrix.dtype)

本章小结

在本节中,我们全面掌握了 NumPy 数组的构造与变形技巧:

  • 熟练掌握了 np.arraynp.zerosnp.onesnp.arangenp.linspace 等核心创建 API;
  • 深入理解了 reshape 的形状变换与 -1 自动推断机制;
  • 掌握了使用 astype() 在整型、浮点型与字符串类型间高效安全转换的方法。

📋 行动清单

  • 尝试结合 np.arangereshape 快速构建任意维度的测试矩阵。
  • 做好准备,进入下一小节学习《多维数组索引、切片、布尔掩码与转置》!

—— 小象教研组

配套学习资源与课件
  • 本节课件:多维数组(PDF · 177KB)
    下载
  • 全套课件打包(第1-5章)(ZIP · 12.8MB)
    下载
  • 全套课件打包(第6-8章)(ZIP · 15MB)
    下载
  • 实战数据集:AppleStore 应用商城分析(ZIP · 329KB)
    下载
  • 实战数据集:女性服装电商分析(ZIP · 2.8MB)
    下载
  • Python 数据分析环境搭建指南(PDF · 2MB)
    下载
  • Scrapy 安装教程(PDF · 12.7MB)
    下载
  • 附加实战项目:AppleStore 应用商城数据分析(ZIP · 0.3MB · ipynb + CSV 数据)
    下载
  • 附加实战项目:银行电话营销数据分析(ZIP · 0.4MB · ipynb + CSV 数据)
    下载
  • 附加实战项目:女性服装电商评论数据分析(ZIP · 2.7MB · ipynb + CSV 数据)
    下载
  • 附加实战项目:美国化学学会杂志数据分析(ZIP · 34.2MB · ipynb + SQLite 数据库)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问