Python多维数据传参有四种方式:一是直接传嵌套列表,适用于中小规模、逻辑清晰场景;二是用NumPy数组,支持N维、向量化运算且性能高;三是多进程需展平为一维共享内存再reshape;四是用*args接收数量不定的多个数组。

直接传列表或嵌套列表(最常用)
Python 本身没有“多维数组”类型,但可以用嵌套列表模拟,比如 [[1,2], [3,4], [5,6]] 表示 3×2 的二维结构。这类结构可直接作为参数传入函数,无需额外处理:
- 函数内部可正常遍历、索引和修改,因为列表是可变对象,传递的是引用
- 不需声明维度,函数通过
len(arr)和len(arr[0])等动态判断形状 - 适合中小规模数据、逻辑清晰的场景,代码简洁易读
用 NumPy 数组传任意维(推荐科学计算)
真正支持多维、高效运算的是 NumPy 数组。它原生支持 N 维,且 shape、dtype 明确:
- 创建后直接传参:
func(my_ndarray),函数内可用arr.shape获取维度,如(3,4,2) - 支持向量化操作(如
arr * 2),避免显式循环,性能高 - 若需变长(不同调用维度不同),函数开头加检查即可:
if arr.ndim == 2: ... elif arr.ndim == 3: ...
多进程环境下只能传一维共享内存
如果在 multiprocessing 中跨进程传递多维数组,不能直接传嵌套列表或 NumPy 对象,因为进程间内存隔离:
-
mp.Array或mp.RawArray只支持一维、基础类型(如'f'浮点、'i'整型) - 必须手动展平多维数组(如
arr.flatten()),传入一维共享内存,再在子进程中用.reshape()恢复形状 - 例如三维数组
(2,3,4)→ 展平为长度 24 的一维 → 子进程里np.frombuffer(...).reshape(2,3,4)
用 *args 接收多个独立数组(灵活组合)
当调用时数组数量不确定(比如拼接、对比多个矩阵),可用 *args 打包接收:
- 定义函数:
def process_many(*arrays):,调用时process_many(arr1, arr2, arr3) - 每个
array可以是任意维的 NumPy 数组或嵌套列表,函数内逐个处理 - 配合
isinstance(x, np.ndarray)或hasattr(x, 'shape')做类型/维度分发更安全

















