向结构化的numpy数组添加字段(2)

15

我知道关于这个主题已经有一个问题(向结构化numpy数组添加字段的最简洁方法),请参见

向结构化numpy数组添加字段

但是,我对那里给出的答案有一个问题...

如果您使用的是numpy 1.3,则还有numpy.lib.recfunctions.append_fields()

我仍然使用numpy 1.3,但它无法识别此函数,并且我在numpy文档中也没有找到任何关于它的内容。这个函数发生了什么?有另一个可以完成相同操作的函数吗?

3个回答

15

http://projects.scipy.org/numpy/browser/branches/1.3.x/numpy/lib/recfunctions.py?rev=8229

你导入了吗?

from numpy.lib import recfunctions

recfunctions.append_fields(*your_args)  # base, names, data, ...

看起来一切都正常工作:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.__version__
'1.3.0'
>>> from numpy.lib.recfunctions import append_fields
>>> append_fields
<function append_fields at 0x9e3e80c>
>>> 

确实,我没有导入...请查看其他答案。 - joris
1
我也遇到了这个问题。使用import numpy,然后使用numpy.lib.recfunctions.append_fields是不起作用的。需要使用import numpy.lib.recfunctions或者像@DTing建议的那样做一些事情。不确定为什么recfunctions不会因为import numpy而被识别... - Roland

14

这里是如何使用append_fields(..)的具体示例(基于其他答案):

import numpy as np
x = np.array(np.arange(0,10), dtype = [('x', float)])
y = np.array(np.arange(10,20), dtype = [('y', float)])

from numpy.lib.recfunctions import append_fields

z = append_fields(x, 'y', y)
where
z.dtype.names

将会给予

('x', 'y')
请注意,在这里y也可以是没有列名的'plain'ndarray
y = np.arange(10,20)

或者您可以将列y重命名为其他名称(即使y是具有列名称的结构化数组):

或者您可以将y列重命名为其他名称(即使y是带有列名称的结构化数组):

z = append_fields(x, 'p', y)

(在numpy 1.6.1中测试过)


3

1
谢谢您!我以为在numpy中这是标准的,所以尝试打np.lib.recfunctions.append_fields()(当然,导入了numpy作为np),但没有单独导入numpy.lib.recfunctions,所以它不知道这个函数。但仍然,它并未在numpy文档中提到,这使得查找它并不容易。您知道为什么它没有被包括进去吗? - joris
没问题。很高兴你解决了它。我不确定为什么他们没有在文档中包含这个(我不熟悉他们的文档政策,所以如果你真的感兴趣或认为这是一个文档错误,你可能需要问其中一个项目开发人员)。 - J. Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接