这个问题已被编辑为更有意义。
最初的问题是如何将值插入到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语句有效,但它会在名称和偏移字段中插入它。我想在名称字段中插入它。我怎么做?
由于
答案 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')
每个字符串为name
,module
和offset
。
或者是这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','', ''