2017-07-14 45 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