Python 如何使用结构化数据填充多个命名字段

Python 如何使用结构化数据填充多个命名字段,python,numpy,field,multiple-columns,structured-array,Python,Numpy,Field,Multiple Columns,Structured Array,我想从一些字段中获取信息,然后使用列表将它们写入另一个变量 import numpy as np var1 = np.array([(1,2,3,4),(11,22,33,44),(111,222,333,444)], dtype=([('field1', 'int32'),('field2','int32'),('field3','int32'),('field4','int32')])) var2 = np.empty((1), dtype = ([('field1', 'int32'),(

我想从一些字段中获取信息,然后使用列表将它们写入另一个变量

import numpy as np
var1 = np.array([(1,2,3,4),(11,22,33,44),(111,222,333,444)], dtype=([('field1', 'int32'),('field2','int32'),('field3','int32'),('field4','int32')]))
var2 = np.empty((1), dtype = ([('field1', 'int32'),('field2','int32'),('field5','int32'),('field6','int32')]))
myList = ['field1', 'field2']
我想把第一个和第二个字段以及第一行的值写入var2。我尝试以下方法:

var2[(myList)] = var1[(myList)][0]
但我得到了以下错误:

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
如果我执行以下操作,我希望达到同样的效果:

var2['field1'] = var1['field1'][0]
var2['field2'] = var1['field2'][0]

如何才能在较高的列表中执行此操作,避免在列表上出现for循环?

字段列表用于获取字段的子集

In [139]: var1[myList]
Out[139]: 
array([(1, 2), (11, 22), (111, 222)], 
      dtype=[('field1', '<i4'), ('field2', '<i4')])
迭代字段名是结构化数组代码中的常见做法(如
np.rec
函数)。通常,结构化数组将有许多元素(“行”)但有几个字段(“列”),因此对字段的迭代并不昂贵


在这种情况下,
var2
的所有字段都是相同的
int
dtype。因此,我可以在相应的二维视图上执行赋值

In [160]: var2.view(int)[:2] = var1[myList][0].tolist()
var2
数据缓冲区都是整数,因此可以将其视为字段或常规数组(2d或1)

var2.view(int)[:2]=var1[myList][0]
var1['field1'][0]
分配给
var2
的两个项。所以我必须把它做成一个列表或元组

或者,我也可以查看
var1
。有了这个,我发现我还需要重塑。
视图
生成缓冲区的1d数组视图

var2.view(int)[:2]=var1.view(int).reshape((3,4))[0,:2]
多字段分配正在开发中,但我认为还没有正式发布


也可以表示为:

var1.view((int,4))

(复合视图更紧凑,但没有更快)。

我已经厌倦了这种方式,但我认为这将是一种更有效的方式。。。无论如何谢谢你!我可以搜索
numpy
github
问题,查看是否有人试图将其添加到结构化数组
\uuuuuuu setitem\uuuuu
方法中。由于所有字段都是int,因此可以
将这些数组视为常规的1或2d数组,并使用数字索引。
var2.view(int)[:2]=var1.view(int).reshape((3,4))[0,:2]
var1.view(int).reshape((3,4))  # or 
var1.view(int).reshape((-1,4))
var1.view((int,4))