recarray 是一个记录数组。每条记录可以有多个字段。记录有点像 C 中的结构。
如果recarray 的形状是(133433,)
那么recarray 是记录的一维数组。
recarray 的字段可以通过基于名称的索引来访问。例如,csv['nsub']
并且本质上等价于
np.array([record['nsub'] for record in csv])
这种特殊的基于名称的索引支持一维recarray 是二维数组的错觉——csv[intval]
选择行,csv[fieldname]
选择“列”。但是,在引擎盖下,严格来说,如果形状是,(133433,)
那么它是一维的。
请注意,并非所有的重新数组都是一维的。有可能有一个更高维的recarray,
In [142]: arr = np.zeros((3,2), dtype=[('foo', 'int'), ('bar', 'float')])
In [143]: arr
Out[143]:
array([[(0, 0.0), (0, 0.0)],
[(0, 0.0), (0, 0.0)],
[(0, 0.0), (0, 0.0)]],
dtype=[('foo', '<i8'), ('bar', '<f8')])
In [144]: arr.shape
Out[144]: (3, 2)
这是一个二维数组,其元素是记录。
以下是切片中的bar
字段值:arr[:, 0]
In [148]: arr[:, 0]['bar']
Out[148]: array([ 0., 0., 0.])
以下是bar
二维数组中的所有字段值:
In [151]: arr['bar']
Out[151]:
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
In [160]: arr['bar'].all()
Out[160]: False
请注意,使用 recarrays 的替代方法是Pandas Dataframes。操作 Dataframe 的方法比 rearrays 多得多。你可能会发现它更方便。