如何将ndarray转换为结构化数组?

时间:2013-04-06 15:15:41

标签: python numpy

我有一个形状为(100,50)的常规浮动ndarray。如何为前两列提供名称,即'idx1''idx2'以及'data'到其余列。

1 个答案:

答案 0 :(得分:7)

您可以使用view方法。这是一个例子,使用一个形状为(3,5)的数组进行演示:

In [21]: x
Out[21]: 
array([[  0.,   1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.]])

In [22]: y = x.ravel().view(dtype=[('idx1', float), ('idx2', float), ('data', float, 3)])

In [23]: y['idx1']
Out[23]: array([  0.,   5.,  10.])

In [24]: y['data']
Out[24]: 
array([[  2.,   3.,   4.],
       [  7.,   8.,   9.],
       [ 12.,  13.,  14.]])

In [25]: y['data'][1]
Out[25]: array([ 7.,  8.,  9.])

注意y是一维数组;它有形状(3,)。如果您将转化更改为y = x.view(...)(即不要肆意x),y将有(3,1),而y['idx1']将具有形状(3, 1)。