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

NumPy empty()函数用法详解 - Python科学计算

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() 是高性能数组创建函数,适用于需要快速分配内存且立即填充数据的场景。
但请记住:它不会初始化数组元素,使用前必须填充数据以避免不可预测的结果。

发表评论