Python 使用numpy存储不同大小的对象
我有以下任务:Python 使用numpy存储不同大小的对象,python,arrays,numpy,Python,Arrays,Numpy,我有以下任务: 2份清单。第一个列表->项目,第二个列表->每个项目的元数据(2个浮动) 这些列表通过算法的不同步骤进行更改,但它们的长度保持不变。i、 它们的长度增加了,但也同样增加了。通过这种方式,索引是一种识别元数据所指项目的方法 在算法的一个(重复)步骤中,我缩短了识别相同项目的列表。我必须分别调整元数据列表 我可以使用泛型列表来实现它,但在某些时候它会使内存过载。因此,我尝试使用np.array,但它们的问题是每个元素的维数应该相等。i、 e.arr=np.array([1,2,3,4
arr=np.array([1,2,3,4]],dtype=object)
返回arr.ndim=1
。但我需要的是它返回arr.ndim=3
。我仔细研究了一下,发现[3[4]]
属于list
类型,与np.array
无关。当np.array
的每个元素的维数相等时,它将沿np类型的每个轴返回元素,例如np.int32
或np.array
关键的第三步。当我浏览列表并收集相同项目的元数据时,我会将它们放在同一索引下的meta_列表中,即在该索引处创建(或扩展)列表。例如
meta_list=[[1,2],[3,4],[5,6],[7,8]]
然后,比如说,项目列表的第一个和第三个元素是相同的。所以我必须结合他们的元数据。它产生了以下结果:
meta_list=[[1,2],[[3,4],[7,8]],[5,6]]
但是,我不知道如何使用np.array来实现这一步骤,因为[[3,4],[7,8]]
元素的类型是list
。
非常感谢您的提示。带有dtype对象的数组是带有数组包装器的列表。更改数组(任何数据类型)的大小都会生成一个副本。我怀疑数组是否能节省内存。@hpaulj如果我保留一个通用的np.array
,但用np.nan
虚拟地“拆分”它会怎么样1x np.nan='['或']'
2x np.nan='['或']]'
。这将是元列表
的一种表示<代码>[np.nan,1,2,np.nan,np.nan,np.nan,3,4,np.nan,np.nan,np.nan,7,8,np.nan,np.nan,np.nan,5,6,np.nan]
?这会产生大量的开销。但是,numpy的C实现是否可以弥补这一点呢?我只是不太了解体系结构,所以很难做出清醒的估计。要存储nan
值,数组必须具有浮点数据类型(8字节)。形状为(1000,)
的数组将具有8000字节的数据缓冲区,而不管值是否为1、1.234、nan、1.234e342。谢谢@hpaulj。我的意思是列表中的一个对象在ndarray中需要多少存储空间。所以我可以估计这种方法的优势。你知道估计数吗?