03.21 记录数组

记录数组

记录数组(record array)与结构数组类似:

1import numpy as np

质点类型:

1partical_dtype = np.dtype([('mass', 'float'), 
2                           ('velocity', 'float')])

生成记录数组要使用 numpy.rec 里的 fromrecords 方法:

1from numpy import rec
2
3particals_rec = rec.fromrecords([(1,1), (1,2), (2,1), (1,3)], 
4                                dtype = partical_dtype)
1particals_rec
rec.array([(1.0, 1.0), (1.0, 2.0), (2.0, 1.0), (1.0, 3.0)], 
      dtype=[('mass', '<f8'), ('velocity', '<f8')])

在记录数组中,域可以通过属性来获得:

1particals_rec.mass
array([ 1.,  1.,  2.,  1.])

也可以通过域来查询:

1particals_rec['mass']
array([ 1.,  1.,  2.,  1.])

不过,记录数组的运行效率要比结构化数组要慢一些。

也可以通过将一个结构化数组看成记录数组:

1particals = np.array([(1,1), (1,2), (2,1), (1,3)],
2                     dtype = partical_dtype)

使用 view 方法看成 recarray

1particals_rec = particals.view(np.recarray)
1particals_rec.mass
array([ 1.,  1.,  2.,  1.])
1particals_rec.velocity
array([ 1.,  2.,  1.,  3.])

对于自定义的类型,可以通过它的 names 属性查看它有哪些域:

1particals.dtype.names
('mass', 'velocity')