如何将值插入到numpy记录数组中?

时间:2015-11-17 21:34:37

标签: python numpy record

这个问题已被编辑为更有意义。

最初的问题是如何将值插入到numpy记录数组中,我已经取得了成功,但仍然存在问题。基于以下网站,我一直在将值插入记录数组中。

Python代码

instance_format={
    'names' : ('name','offset'),
    'formats' : ('U100','U30')}

instance=np.zeros(20,dtype=instance_format)

#I am placing values in the array similar to this
instance[0]['name']="Wire 1"
instance[1]['name']="Wire 2"
instance[2]['name']="Wire 3"


instance[0]['offset']="0x103"
instance[1]['offset']="0x104"
instance[2]['offset']="0x105"

#Here is the insertion statement that works
instance1 = np.insert(instance1,1,"Module one")

print(instance1)

输出

[('One Wire 1', '0x103')
 ('Module One',  'Module One')
 ('One Wire 2', '0x104')
 ('One Wire 3', '0x105')

因此insert语句有效,但它会在名称和偏移字段中插入它。我想在名称字段中插入它。我怎么做?

由于

2 个答案:

答案 0 :(得分:1)

您的instance

In [470]: instance
Out[470]: 
array([('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''),
       ('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''),
       ('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''),
       ('', '', ''), ('', '', ''), ('', '', ''), ('', '', ''),
       ('', '', ''), ('', '', ''), ('', '', ''), ('', '', '')], 
      dtype=[('name', '<U100'), ('module', '<U100'), ('offset', '<U30')])

看起来不像

 ['One Wire Instance 1', 'One Wire Instance 2', 'One Wire Instance 3']

您是在谈论instance的一条记录,它会显示为

 ('One Wire Instance 1', 'One Wire Instance 2', 'One Wire Instance 3')

每个字符串为namemoduleoffset

或者是这3个字符串,例如instance['name'][:3],3条记录中的“名称”字段?

将新记录插入instance数组是一回事,向数组添加新字段是另一回事。

要将np.insert与结构化数组一起使用,您需要提供具有正确dtype的1元素数组。

使用新的instance

In [580]: newone = np.array(("module one",'',''),dtype=instance.dtype)
In [581]: newone
Out[581]: 
array(('module one', '', ''), 
      dtype=[('name', '<U100'), ('module', '<U100'), ('offset', '<U30')])

In [582]: np.insert(instance,1,newone)
Out[582]: 
array([('Wire 1', '', '0x103'), ('module one', '', ''),
       ('Wire 2', '', '0x104'), ('Wire 3', '', '0x105')], 
      dtype=[('name', '<U100'), ('module', '<U100'), ('offset', '<U30')])

np.insert只是执行以下步骤的函数:

In [588]: instance2 = np.zeros((4,),dtype=instance.dtype)
In [589]: instance2[:1]=instance[:1]
In [590]: instance2[2:]=instance[1:3]
In [591]: instance2
Out[591]: 
array([('Wire 1', '', '0x103'), ('', '', ''), ('Wire 2', '', '0x104'),
       ('Wire 3', '', '0x105')], 
      dtype=[('name', '<U100'), ('module', '<U100'), ('offset', '<U30')])
In [592]: instance2[1]=newone
In [593]: instance2
Out[593]: 
array([('Wire 1', '', '0x103'), ('module one', '', ''),
       ('Wire 2', '', '0x104'), ('Wire 3', '', '0x105')], 
      dtype=[('name', '<U100'), ('module', '<U100'), ('offset', '<U30')])

它创建一个具有正确目标大小的新数组,从原始数组复制元素,并将新数组放入空槽中。

答案 1 :(得分:0)

我无法理解你的意思:

  

我想在第二个元素中插入名称“Reserved”,这将使该数组具有以下内容   ['One Wire Instance 1','Reserved','One Wire Instance 2','One Wire Instance 3']

你想要:

instance[1] = 'Reserved','', ''