亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python將結構數組重塑為普通的numpy數組

python將結構數組重塑為普通的numpy數組

開心每一天1111 2022-03-09 21:18:00
我有一個結構數組,看起來像這樣[(1, 2, 3, 4) (5, 6, 7, 8)]我刪除了第一列,讓它看起來像這樣[(2, 3, 4) (6, 7, 8)]但是當我將它重塑為數組時,它看起來像這樣[[1 2 3 4] [5 6 7 8]]'1' 和 '5' 不應該在那里這是我的代碼import numpy as nparray = np.array([(1,2,3,4), (5,6,7,8)],dtype=[('a', 'i4'), ('b', 'i4'), ('c', 'i4'),('d', 'i4')])names = list(array.dtype.names)new_names=names[1:]data = array[new_names]new_array = data.view('i4').reshape(len(data),-1)我可以知道為什么以及如何編輯它嗎?
查看完整描述

2 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

In [128]: array = np.array([(1,2,3,4), (5,6,7,8)],dtype=[('a', 'i4'), ('b', 'i4'), ('c', '

     ...: i4'),('d', 'i4')]) 

     ...: names = list(array.dtype.names) 

     ...: new_names=names[1:] 

     ...: data = array[new_names]                                                         

In [129]: array.dtype                                                                     

Out[129]: dtype([('a', '<i4'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4')])

In [130]: names                                                                           

Out[130]: ['a', 'b', 'c', 'd']

In [131]: data                                                                            

Out[131]: 

array([(2, 3, 4), (6, 7, 8)],

      dtype={'names':['b','c','d'], 'formats':['<i4','<i4','<i4'], 'offsets':[4,8,12], 'itemsize':16})

請注意,data.dtype有offsets. 在最新numpy版本中,選擇字段的子集會生成view. array['a']還在那里,只是'隱藏'。


除了這一變化,他們還為以下內容添加了一些功能recfunctions:


In [133]: import numpy.lib.recfunctions as rf 

要制作沒有“a”數據的副本:


In [134]: data1 = rf.repack_fields(data)                                                  

In [135]: data1                                                                           

Out[135]: 

array([(2, 3, 4), (6, 7, 8)],

      dtype=[('b', '<i4'), ('c', '<i4'), ('d', '<i4')])

并制作一個非結構化數組:


In [136]: rf.structured_to_unstructured(array)                                            

Out[136]: 

array([[1, 2, 3, 4],

       [5, 6, 7, 8]], dtype=int32)

In [137]: rf.structured_to_unstructured(data)                                             

Out[137]: 

array([[2, 3, 4],

       [6, 7, 8]], dtype=int32)

In [138]: rf.structured_to_unstructured(data1)                                            

Out[138]: 

array([[2, 3, 4],

       [6, 7, 8]], dtype=int32)

這些功能記錄在:


https://docs.scipy.org/doc/numpy/user/basics.rec.html#accessing-multiple-fields


由于所有字段都具有相同的 dtype ('i4')view作品 - 在一定程度上


In [142]: data.view('i4')                                                                 

Out[142]: array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)

In [143]: data1.view('i4')                                                                

Out[143]: array([2, 3, 4, 6, 7, 8], dtype=int32)

但它是基礎數據的視圖,形狀混亂。早期版本中存在此形狀問題。所以最好閱讀這些變化,并使用推薦的功能。


在之前的 SO 問題中,我可能建議使用列表作為中介:


In [144]: data.tolist()                                                                   

Out[144]: [(2, 3, 4), (6, 7, 8)]

In [145]: np.array(data.tolist())                                                         

Out[145]: 

array([[2, 3, 4],

       [6, 7, 8]])


查看完整回答
反對 回復 2022-03-09
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

嘗試在最后切片:


new_array = data.view('i4').reshape(len(data),-1)[:,1:]

結果:


[[2 3 4]

 [6 7 8]]


查看完整回答
反對 回復 2022-03-09
  • 2 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號