我有一个起始数组:
[(1, [-112.01268501699997, 40.64249414272372])
(2, [-111.86145708699996, 40.4945008710162])]
其中第一列是int,第二列是带有浮点数的元组.我需要添加一个名为USNG的字符串列.
然后我创建一个结构化的numpy数组:
dtype = numpy.dtype([('USNG', '|S100')])
x = numpy.empty(array.shape, dtype=dtype)
我想将x numpy数组附加到现有数组以添加新列,以便我可以为每一行输出一些信息.当我执行以下操作时:
numpy.append(array, x, axis=1)# I've also tried vstack and hstack
我收到以下错误:
'TypeError: invalid type promotion'
有关为什么会发生这种情况的任何建议?
谢谢
解决方法:
您必须创建一个包含新字段的新dtype.
例如,这是一个:
In [86]: a
Out[86]:
array([(1, [-112.01268501699997, 40.64249414272372]),
(2, [-111.86145708699996, 40.4945008710162])],
dtype=[('i', '
a.dtype.descr是[(‘i’,’< i8'),('loc','< f8',(2,))];即字段类型列表.我们将通过在该列表的末尾添加('USNG','S100')来创建新的dtype:
In [87]: new_dt = np.dtype(a.dtype.descr + [('USNG', 'S100')])
现在创建一个新的结构化数组,b.我在这里使用零,所以字符串字段将以值”开头.你也可以使用空.然后字符串将包含垃圾,但如果您立即为它们分配值,则无关紧要.
In [88]: b = np.zeros(a.shape, dtype=new_dt)
将现有数据从a复制到b:
In [89]: b['i'] = a['i']
In [90]: b['loc'] = a['loc']
现在是b:
In [91]: b
Out[91]:
array([(1, [-112.01268501699997, 40.64249414272372], ''),
(2, [-111.86145708699996, 40.4945008710162], '')],
dtype=[('i', '
使用一些数据填写新字段:
In [93]: b['USNG'] = ['FOO', 'BAR']
In [94]: b
Out[94]:
array([(1, [-112.01268501699997, 40.64249414272372], 'FOO'),
(2, [-111.86145708699996, 40.4945008710162], 'BAR')],
dtype=[('i', '
标签:python,python-2-7,numpy,structured-array
来源: https://codeday.me/bug/20190528/1173025.html