是否可以为所有列只定义一次数据类型?

Is there a possibility to define dtype only once for all columns?

如果所有列的类型相同(例如 Float),有可能 dtype 只为所有列定义一次?

示例:

inarray = numpy.array([(1.54, 1111.01, 45.12,... n), 
                       (2.34, 2222.22, 11.23,... n), 
                        (5.34, 18.22, 11.11,...n)],
                  numpy.dtype([('column_name','<f8')])

我们也想知道是否可以自动生成列名?

numpy.dtype([('????','<f8')])

此示例通过创建字符串生成 4 个字段:'<f8,<f8,<f8,<f8':

In [126]: np.zeros((3,),np.dtype(','.join(['<f8']*4)))
Out[126]: 
array([(0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 0.0)], 
      dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8')])

可能有一种用列表和元组构造它的方法,但是这个字符串版本很容易理解和构造。

一些备选方案:

np.dtype([('field_%d'%i, '<f8') for i in range(4)])

np.dtype({'formats':['f8']*4, 'names':['f%s'%i for i in range(4)]})

np.format_parser(['f8']*4,[],[]).dtype  # auto generate names

我解决了问题...

input_array = [(1.1, 11.2, 1111.0, ...n), 
               (1.3, 2.4, 2222.22, ...n)]

columns_count = len(input_array[0])


lists = [('','<f8')] * columns_count


inarray = numpy.array(input_array,
                      numpy.dtype(lists))