2017-07-14 47 views
2

numpy manual提到了numpy.save如何构建嵌套numpy记录数组?

安妮分析师一直使用大型嵌套记录阵列代表 她的统计数据使用情况。

是否有可能嵌套记录数组没有dtype = object?如果是这样,怎么样?

+0

是否https://stackoverflow.com/questions/19201868/how-to-set-dtype-for-nested-numpy-ndarray回答你的问题? – Eric

回答

-1

您可以构造嵌套数组您构建嵌套列表以同样的方式:

nested_list = [['a',1],['b',2],['c',3]] 

import numpy as np 
nested_array = np.array(nested_list) 
2

是的,就像这样:

engine_dt = np.dtype([('volume', float), ('cylinders', int)]) 
car_dt = np.dtype([('color', int, 3), ('engine', engine_dt)]) # nest the dtypes 

cars = np.rec.array([ 
    ([255, 0, 0], (1.5, 8)), 
    ([255, 0, 255], (5, 24)), 
], dtype=car_dt) 

print(cars.engine.cylinders) 
# array([ 8, 24]) 

np.dtype功能并非绝对必要在这里,但它通常是好主意,并且每次让array都会调用它,这会带来很小的速度提升。

请注意,rec.array只在这里使用.engine表示法。如果您使用了简单的np.array,那么您会使用cars['engine']['cylinders']

+0

'cars'的数据必须正确嵌套(正确混合[]和())。这可能是错误的来源。但是,只要有足够的数据,从'csv'' genfromtxt'加载时就可以使用'平坦'列列表。 – hpaulj

+0

刚刚检查:'genfromtxt'首先创建一个带有扁平版本'dtype'的数组,然后用嵌套的dtype返回一个视图。 – hpaulj

+0

这可以用不同长度的列表来完成吗?例如。如果我想为“car_dt”添加一个字段''photo'',这是一个未知大小和类型为int的二维数组,它将如何? (为简单起见,我们使用黑白图像) – lumbric