python – 可變長度的numpy recarray字串
是否可以初始化一個可以保持字串的numpy recarray,而不知道字串的長度呢?
作為(設計)的例子:
mydf = np.empty( (numrows,), dtype=[ ('file_name','STRING'), ('file_size_MB',float) ] )
問題是我正在使用資訊填充我的重組,而且我不一定需要事先知道file_name的最大長度.
我所有的嘗試導致字串欄位被截斷:
>>> mydf = np.empty( (2,), dtype=[('file_name',str),('file_size_mb',float)] ) >>> mydf['file_name'][0]='foobarasdf.tif' >>> mydf['file_name'][1]='arghtidlsarbda.jpg' >>> mydf array([('', 6.9164002347457e-310), ('', 9.9413127e-317)], dtype=[('file_name', 'S'), ('file_size_mb', '<f8')]) >>> mydf['file_name'] array(['f', 'a'], dtype='|S1')
(除此之外,mydf [‘file_name’]為什麼顯示’f’和’a’,而mydf顯示”和”?
類似地,如果我用type(say)| S10為file_name初始化,那麼事情將被截斷為10.
我可以找到的唯一類似的問題是ofollow,noindex" target="_blank">this one ,但是這是先驗計算適當的字串長度,因此與我不一樣(因為我事先知之甚少).
除了使用(例如)| S9999999999999(即一些可笑的上限)啟動file_name,還有其他替代方法?
而不是使用STRING dtype,可以隨時使用物件作為dtype.這將允許將任何物件分配給陣列元素,包括Python變長字串.例如:
>>> import numpy as np >>> mydf = np.empty( (2,), dtype=[('file_name',object),('file_size_mb',float)] ) >>> mydf['file_name'][0]='foobarasdf.tif' >>> mydf['file_name'][1]='arghtidlsarbda.jpg' >>> mydf array([('foobarasdf.tif', 0.0), ('arghtidlsarbda.jpg', 0.0)], dtype=[('file_name', '|O8'), ('file_size_mb', '<f8')])
這是一個反對陣列概念的精神,以具有可變長度的元素,但這是一個接近可以得到.陣列的想法是元素儲存在儲存器中,這些儲存器地址明確定義和間隔開,這些地址禁止可變長度的元素.通過將指標儲存到陣列中的字串,可以規避此限制. (這基本上是上面的例子.)
http://stackoverflow.com/questions/9108837/numpy-recarray-strings-of-variable-length