我有一个结构化的numpy数组,像这样:
array([(-0.85694593, -6.3997216, -1.5486323 , 37, 50, 0, 0),
(-1.1892447 , -11.417209 , -0.21771915, 97, 50, 0, 0),
(-0.84541476, -11.3712845, -0.8726147 , 75, 50, 0, 0), ...,
(-0.057407 , -6.266104 , 1.6693828 , 19, 0, 16, 63),
( 0.56391037, -11.262503 , 0.31594068, 0, 0, 150, 63),
( 0.9118347 , -11.4296665, -0.3372402 , 96, 0, 0, 0)],
dtype=[('x', '<f4'), ('y', '<f4'), ('z', '<f4'), ('intensity', 'u1'), ('timestamp', 'u1'), ('m', 'u1'), ('_', 'u1')])
注意,0到2列是浮点数,3到6列是整数。
我想有效地将这个数组转换为2D浮点数组。我该如何执行此操作?
3条答案
按热度按时间rnmwe5a21#
这里有一种方法,它至少应该是内存有效的,而且不会太慢:
我假设你想要
np.float32
作为结果数组。xxb16uws2#
recfunctions
有一些函数可以处理重数组(以及结构化数组)。它记录在结构化数组主页上。它需要特殊的装载:该库最近添加了一对转换器函数:
另一个答案中的
tolist
方法是有效的,因为对于结构化数组,结果是一个元组的列表,np.array
可以像解析列表的列表一样容易解析。但是,如果要创建结构化数组,则需要元组列表。numpy
开发人员选择显示/解析结构化数组records
作为元组。许多
recfunctions
的工作原理是创建一个目标数组,然后逐字段复制数据。由于记录的数量通常比字段的数量大得多,因此这是相对有效的。我假设structured_to_unstructured
是这样工作的,尽管我还没有检查它的代码。我还没有计算这些选择的时间。
fquxozlt3#
特别地,可以用
'names'/'formats'
字典重建新的数据类型对象,其中'names'
保存当前字段名称,'formats'
-相应的dtype格式: