多维数组初始化应优先选用匹配场景的结构:数值计算用NumPy(如np.zeros),动态结构用正确列表推导式,大地图考虑扁平化或结构化数组,并复用已有数组形状。
多维数组初始化速度慢,通常不是因为“写法太复杂”,而是选错了底层结构或忽略了内存与类型约束。关键在于匹配场景:纯数值计算优先用 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
np.empty(n, dtype=[('x', 'i4'), ('y', 'i4'), ('cost', 'f4')])
Array.from({length: r}, () => Array(c).fill(0)),禁用 Array(r).fill(Array(c))
已有数组结构时,别再手动数维度、猜类型。
np.zeros_like(original_array) 一键继承 shape、dtype、order 和 stridesresult = np.zeros_like(img) 立刻对齐np.zeros(original_array.shape, dtype=original_array.dtype) 更安全,不漏掉自定义 dtype 或内存布局