能否创建形状为(n,m,3)且m随n[i]变化的空numpy数组?
问题解答
首先明确:常规的numpy多维数组做不到这一点。因为numpy的核心特性之一是「同质多维数组」,要求每个维度的长度是固定的全局值,不能让第二个维度的长度随第一个维度的索引变化——简单说就是所有子数组的长度必须一致,没法做到第i个元素对应长度为m_i的第二维度。
不过有几种替代方案可以实现类似需求:
用Python列表存储独立的numpy数组
这是最直接也最常用的方式,把每个形状为(m_i, 3)的空数组存在列表里,示例代码:import numpy as np # 假设n是一个存储各m值的列表,比如n = [3, 5, 2] arr_list = [np.empty((m, 3)) for m in n]这种方式操作灵活,每个子数组可以独立处理,也能随时转换成其他结构。
使用numpy的object类型数组
可以创建一个dtype为object的numpy数组,每个元素存放一个形状为(m_i, 3)的空数组,示例代码:import numpy as np n = [3, 5, 2] obj_arr = np.empty(len(n), dtype=object) for idx, m in enumerate(n): obj_arr[idx] = np.empty((m, 3))注意:这种数组本质是把Python对象存在numpy容器里,没法像常规numpy数组那样进行矢量化运算,大部分操作还是得逐个元素处理。
如果有统一处理需求,考虑稀疏数组
要是后续需要对这些数据做批量运算,且大部分元素为空,可以用scipy.sparse里的稀疏矩阵结构,但需要根据具体场景调整维度和存储方式。
内容的提问来源于stack exchange,提问作者Dusan Cocic
相关产品推荐
相关产品推荐

