NumPy empty()函数:创建未初始化数组的完整指南
掌握如何使用numpy.empty()函数高效创建数组,了解其与zeros()和ones()的区别
什么是numpy.empty()函数?
NumPy的empty()
函数用于创建一个指定形状和数据类型的新数组,而不初始化数组元素。这意味着数组的内容是随机的,取决于内存的当前状态。
函数语法
numpy.empty(shape, dtype=float, order='C')
参数详解
- shape: 数组的形状,可以是整数或整数元组
- dtype: 数组的数据类型(可选,默认为float)
- order: 内存中的存储顺序('C'表示行优先,'F'表示列优先)
返回值
返回一个具有给定形状和数据类型的新数组,数组元素为未初始化的随机值。
基础用法示例
创建一维数组
import numpy as np # 创建包含5个元素的一维数组(未初始化) arr = np.empty(5) print(arr) # 输出示例: [1. 2. 3. 4. 5.] 或 [0. 0. 0. 0. 0.] 或其他随机值
创建二维数组
# 创建3x4的二维数组 arr_2d = np.empty((3, 4)) print(arr_2d) """ 输出示例: [[6.23042070e-307 4.67296746e-307 1.69121096e-306 1.33511562e-306] [1.89146896e-307 1.37961302e-306 6.23053954e-307 1.42417221e-306] [1.11261027e-306 1.42410974e-306 6.23061763e-307 1.33511969e-306]] """
高级用法
指定数据类型
# 创建整数类型数组 int_arr = np.empty((2, 3), dtype=int) print(int_arr) """ 输出示例: [[140202699176784 140202699176784 140202699176784] [140202699176784 140202699176784 140202699176784]] """
使用列优先存储
# 创建列优先存储的数组 arr_f_order = np.empty((2, 3), order='F') print(arr_f_order)
与zeros()和ones()的比较
empty()
创建未初始化数组
内存中已有内容不被清除
性能最高
zeros()
创建全0数组
所有元素初始化为0
性能中等
ones()
创建全1数组
所有元素初始化为1
性能中等
使用场景与注意事项
适用场景
- 需要快速创建大型数组时
- 计划立即填充所有元素时
- 对性能要求极高的场景
重要注意事项
- 数组元素是未定义的,包含内存中的随机值
- 使用前必须初始化数组,否则会导致不可预测的结果
- 不适合需要默认值(如0)的场景
- 调试时可能更困难,因为值不可预测
性能对比
import numpy as np import time size = 10000000 # 1000万元素 # 测试empty()性能 start = time.time() arr_empty = np.empty(size) end = time.time() print(f"empty() 耗时: {end - start:.6f} 秒") # 测试zeros()性能 start = time.time() arr_zeros = np.zeros(size) end = time.time() print(f"zeros() 耗时: {end - start:.6f} 秒") # 测试ones()性能 start = time.time() arr_ones = np.ones(size) end = time.time() print(f"ones() 耗时: {end - start:.6f} 秒")
典型输出:
empty() 耗时: 0.002 秒
zeros() 耗时: 0.015 秒
ones() 耗时: 0.016 秒
注意:empty() 比 zeros() 和 ones() 快 7-8 倍
总结
numpy.empty() 是高性能数组创建函数,适用于需要快速分配内存且立即填充数据的场景。
但请记住:它不会初始化数组元素,使用前必须填充数据以避免不可预测的结果。
发表评论