最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何优化多维数组初始化的速度
时间:2026-06-20 10:08:14 编辑:袖梨 来源:一聚教程网
多维数组初始化应优先选用匹配场景的结构:数值计算用NumPy(如np.zeros),动态结构用正确列表推导式,大地图考虑扁平化或结构化数组,并复用已有数组形状。
多维数组初始化速度慢,通常不是因为“写法太复杂”,而是选错了底层结构或忽略了内存与类型约束。关键在于匹配场景:纯数值计算优先用 NumPy,动态结构用列表推导式但要避坑,大地图或坐标系统考虑扁平化或结构化数组。
NumPy 是数值型多维数组的首选
纯数字矩阵(如图像、模型权重、坐标网格)直接用 np.zeros 或 np.empty,别用嵌套 list。
- 用
np.zeros((rows, cols), dtype=np.int32)替代[[0] * cols for _ in range(rows)]:前者一次分配连续内存,后者创建上亿个 Python 对象 - 明确指定
dtype:避免默认float64浪费内存和精度;坐标运算常用int32,图像常用uint8 - 大尺寸时加
order='C'(默认)确保行遍历缓存友好;列密集操作可试order='F'
避免引用共享陷阱
Python 列表推导式看似灵活,但写错一行就全乱。
- 错误写法:
[[0] * cols] * rows→ 所有行指向同一子列表,改一个全变 - 正确写法:
[[0 for _ in range(cols)] for _ in range(rows)]或更简洁的[[0] * cols for _ in range(rows)] - 若元素是字典或列表等可变对象,必须每次新建:
[[{} for _ in range(cols)] for _ in range(rows)]
超大坐标地图考虑扁平化或结构化存储
1000×1000 以上格子,嵌套 list 或二维 NumPy 都可能带来 GC 压力或内存碎片。
- 用一维数组模拟二维:
data = bytearray(rows * cols),访问时算索引y * cols + x - 需要带属性(如海拔、类型、状态)时,用结构化 NumPy 数组:
np.empty(n, dtype=[('x', 'i4'), ('y', 'i4'), ('cost', 'f4')]) - JavaScript 类似场景可用
Array.from({length: r}, () => Array(c).fill(0)),禁用Array(r).fill(Array(c))
复用已有数组形状,少写维度参数
已有数组结构时,别再手动数维度、猜类型。
- 用
np.zeros_like(original_array)一键继承 shape、dtype、order 和 strides - 尤其适合流水线中生成中间结果:预处理后图像尺寸变了?
result = np.zeros_like(img)立刻对齐 - 比
np.zeros(original_array.shape, dtype=original_array.dtype)更安全,不漏掉自定义 dtype 或内存布局
相关文章
- 《明日方舟终末地》陈千语怎么样-陈千语值得培养吗 07-04
- 《明日方舟终末地》余烬怎样配队-余烬阵容搭配推荐 07-04
- 《明日方舟终末地》骏卫怎么样-骏卫值得培养吗 07-04
- 《明日方舟终末地》莱万汀怎样配队-莱万汀强力配队推荐 07-04
- 《明日方舟终末地》原木怎样获得-原木获得方法 07-04
- 《长生天机降世》太虚境十天智遗迹幻境通关攻略-详细打法解析 07-04