当前位置:首页>python>【一起学Python】第78天:NumPy创建数组全攻略,告别手动敲数据!

【一起学Python】第78天:NumPy创建数组全攻略,告别手动敲数据!

  • 2026-10-11 08:16:29
【一起学Python】第78天:NumPy创建数组全攻略,告别手动敲数据!

📌 写在前面

大家好!👋

欢迎来到**【一起学Python】**的第78天!

前四天我们打下了坚实基础:安装环境 → 认识ndarray → 掌握数据类型 → 熟悉数组属性。今天,我们正式进入实战第一步:如何高效创建NumPy数组?

🤔 为什么要学创建数组?

  • ✅ 数据分析的第一步永远是构造数据
  • ✅ 手动敲数据太慢?NumPy提供秒级生成百万级数据的能力
  • ✅ 掌握不同创建方式,能避开90%的初始值错误
  • ✅ 为后续的切片、运算、建模铺平道路

今天你将学到:

  • 🔸 从Python对象快速转换数组
  • 🔸 arange vs linspace 的核心区别
  • 🔸 特殊数组(zeros/ones/empty)的正确用法
  • 🔸 随机数生成的实战技巧与可重复性设置

准备好了吗?让我们开始吧!👇

一、从已有数据创建数组

1.1 最基础:从列表/元组创建

import numpy as np# 从列表创建一维数组arr1 = np.array([1, 2, 3, 4, 5])print("一维数组:", arr1)# 从嵌套列表创建二维数组arr2 = np.array([[1, 2, 3],                  [4, 5, 6]])print("二维数组:\n", arr2)

💡 关键提醒:

  • np.array() 默认会复制数据,修改新数组不会影响原列表
  • 如果数据量极大,建议直接使用NumPy原生创建函数,避免Python列表转换的内存开销

二、从数值范围创建数组

2.1 arange():类似Python的range,但更强大

# 创建0~9的数组arr_arange = np.arange(10)print("arange(10):", arr_arange)# 指定起始、终止、步长arr_step = np.arange(0, 10, 2)print("步长为2:", arr_step)  # [0 2 4 6 8]

⚠️ 注意:arange不包含终止值(类似Python的range)

2.2 linspace():均匀采样,数据分析最爱

# 在0~1之间均匀生成5个数arr_linspace = np.linspace(0, 1, 5)print("linspace:", arr_linspace)# 输出: [0.   0.25 0.5  0.75 1.  ]
arange vs linspace 对比:
┌────────────┬──────────────┬──────────────┐│    函数    │   控制参数   │   适用场景   │├────────────┼──────────────┼──────────────┤│ arange     │ 步长(step)   │ 整数索引、循环││ linspace   │ 元素个数(num)│ 画图、等距采样│└────────────┴──────────────┴──────────────┘
💡 避坑指南:当步长是浮点数时,arange可能因精度问题少生成一个元素!此时强烈建议改用linspace。

三、创建特殊数组 ⚡

3.1 全零、全一、自定义填充

# 全零数组(2行3列)zeros_arr = np.zeros((2, 3))print("全零数组:\n", zeros_arr)# 全一数组(3行2列)ones_arr = np.ones((3, 2))print("全一数组:\n", ones_arr)# 自定义填充值(超实用!)full_arr = np.full((2, 3), fill_value=99)print("填充99的数组:\n", full_arr)

3.2 empty():速度最快,但需小心!

empty_arr = np.empty((2, 2))print("未初始化数组:\n", empty_arr)# 输出:内存中的随机垃圾值(每次运行不同)

⚠️ 核心区别:

  • zeros/ones/full:会初始化内存,安全但稍慢
  • empty:不初始化,直接分配内存,速度最快,但值不可控!
  • ✅ 使用场景:当你确定会立刻覆盖所有元素时,用empty提升性能

四、随机数生成:数据分析的“盲盒” 🎲

NumPy的random模块是模拟数据、机器学习初始化的核心工具。

4.1 三种常用随机分布

# 1. 均匀分布 [0, 1)rand_arr = np.random.rand(2, 3)print("均匀分布:\n", rand_arr)# 2. 标准正态分布(均值0,标准差1)randn_arr = np.random.randn(3, 2)print("正态分布:\n", randn_arr)# 3. 指定范围随机整数 [low, high)randint_arr = np.random.randint(0, 10, (2, 3))print("随机整数:\n", randint_arr)

4.2 必学技巧:设置随机种子 🔑

np.random.seed(42)  # 固定随机种子seed_arr1 = np.random.rand(3)print("第一次运行:", seed_arr1)np.random.seed(42)  # 再次设置相同种子seed_arr2 = np.random.rand(3)print("第二次运行:", seed_arr2)# 输出完全相同!这对模型复现、调试至关重要 ✅

应用场景:

  • 机器学习划分训练/测试集
  • 神经网络权重初始化
  • 蒙特卡洛模拟实验

今日作业

基础题 ⭐

  • 使用np.arange创建0~20,步长为3的数组
  • 使用np.linspace创建1~10之间包含8个元素的数组
  • 创建一个3×4的全零数组,并将其数据类型指定为float32

进阶题 ⭐

  • 使用np.random.randint生成一个5×5的矩阵,元素范围[1, 100]
  • 设置随机种子为100,生成3个随机数,记录结果
  • 对比np.zeros((1000,1000))和np.empty((1000,1000))的创建时间(使用time模块)

挑战题 ⭐⭐

  • 用np.empty创建一个形状为(2, 3)的数组,然后用循环将其填充为[[1,2,3],[4,5,6]]
  • 编写一个函数:输入(start, stop, num),自动判断用arange还是linspace更合适
  • 生成1000个服从正态分布的随机数,计算它们的均值和标准差(验证是否接近0和1)

💡 参考代码:

import numpy as npimport time# 基础题arr1 = np.arange(0, 20, 3)arr2 = np.linspace(1, 10, 8)arr3 = np.zeros((3, 4), dtype=np.float32)# 进阶题matrix = np.random.randint(1, 100, (5, 5))np.random.seed(100)rand_nums = np.random.rand(3)print("随机数:", rand_nums)# 性能对比start = time.time()_ = np.zeros((1000, 1000))print(f"zeros耗时: {time.time()-start:.4f}秒")start = time.time()_ = np.empty((1000, 1000))print(f"empty耗时: {time.time()-start:.4f}秒")

🎓 明日预告

第79天:NumPy切片与索引进阶

你将学到:

  • 🔸 多维数组的切片语法精髓
  • 🔸 布尔索引:按条件筛选数据
  • 🔸 花式索引:高级数据提取技巧
  • 🔸 实战:从Excel表格思维到NumPy索引思维

敬请期待!

💡 学习小贴士

  1. 创建选择指南:
    • 等差序列 → arange
    • 等分采样 → linspace
    • 占位初始化 → zeros(安全) / empty(极速)
    • 模拟数据 → random 系列
  2. 性能优化:
    • 创建大数组时,先分配后填充,避免循环中append
    • 始终在创建时指定dtype,避免后续转换开销
  3. 调试技巧:
    • 随机结果不一致?检查是否漏了np.random.seed()
    • empty输出奇怪的值?这是正常的!记得用zeros替代

📚 学习路线图

第74天:NumPy安装 ✓第75天:ndarray对象 ✓第76天:数据类型 ✓第77天:数组属性 ✓第78天:创建数组 ✓ ← 你今天在这里第79天:切片和索引第80天:数组运算第81天:广播机制...

💬 写在最后

创建数组是数据分析的起手式,掌握这些方法,你就能:

✅ 秒级构造百万级测试数据✅ 精准控制初始值与分布✅ 为后续计算打下坚实基础

今天重点掌握:

  • ✅ arange 与 linspace 的场景选择
  • ✅ empty 的性能优势与使用边界
  • ✅ 随机种子的可重复性价值

如果觉得有用,记得:

  • 👍 点赞支持一下
  • ⭐ 收藏方便复习
  • 📤 分享给更多小伙伴

完成作业的同学,欢迎在评论区打卡! 💪

【一起学Python】每天进步一点点,365天后遇见更优秀的自己!

关注公众号,不错过每天的学习内容!

🎯 今日金句:

"好数据是算出来的,好数组是创出来的。掌握创建技巧,让数据为你所用!" 🛠️

明天见! 🌟

最新文章

随机文章