python将结构数组重塑为普通的numpy数组

我有一个结构数组,看起来像这样


[(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 np


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]

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

我可以知道为什么以及如何编辑它吗?


开心每一天1111
浏览 155回答 2
2回答

梦里花落0921

In [128]: array = np.array([(1,2,3,4), (5,6,7,8)],dtype=[('a', 'i4'), ('b', 'i4'), ('c', '&nbsp; &nbsp; &nbsp;...: i4'),('d', 'i4')])&nbsp;&nbsp; &nbsp; &nbsp;...: names = list(array.dtype.names)&nbsp;&nbsp; &nbsp; &nbsp;...: new_names=names[1:]&nbsp;&nbsp; &nbsp; &nbsp;...: data = array[new_names]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;In [129]: array.dtype&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[129]: dtype([('a', '<i4'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4')])In [130]: names&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[130]: ['a', 'b', 'c', 'd']In [131]: data&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Out[131]:&nbsp;array([(2, 3, 4), (6, 7, 8)],&nbsp; &nbsp; &nbsp; 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&nbsp;要制作没有“a”数据的副本:In [134]: data1 = rf.repack_fields(data)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;In [135]: data1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[135]:&nbsp;array([(2, 3, 4), (6, 7, 8)],&nbsp; &nbsp; &nbsp; dtype=[('b', '<i4'), ('c', '<i4'), ('d', '<i4')])并制作一个非结构化数组:In [136]: rf.structured_to_unstructured(array)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Out[136]:&nbsp;array([[1, 2, 3, 4],&nbsp; &nbsp; &nbsp; &nbsp;[5, 6, 7, 8]], dtype=int32)In [137]: rf.structured_to_unstructured(data)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[137]:&nbsp;array([[2, 3, 4],&nbsp; &nbsp; &nbsp; &nbsp;[6, 7, 8]], dtype=int32)In [138]: rf.structured_to_unstructured(data1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Out[138]:&nbsp;array([[2, 3, 4],&nbsp; &nbsp; &nbsp; &nbsp;[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')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[142]: array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)In [143]: data1.view('i4')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;Out[143]: array([2, 3, 4, 6, 7, 8], dtype=int32)但它是基础数据的视图,形状混乱。早期版本中存在此形状问题。所以最好阅读这些变化,并使用推荐的功能。在之前的 SO 问题中,我可能建议使用列表作为中介:In [144]: data.tolist()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[144]: [(2, 3, 4), (6, 7, 8)]In [145]: np.array(data.tolist())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Out[145]:&nbsp;array([[2, 3, 4],&nbsp; &nbsp; &nbsp; &nbsp;[6, 7, 8]])

天涯尽头无女友

尝试在最后切片:new_array = data.view('i4').reshape(len(data),-1)[:,1:]结果:[[2 3 4]&nbsp;[6 7 8]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python