是否有可能只为所有列定义一次dtype?

时间:2015-03-14 17:36:40

标签: python arrays numpy arcpy

如果所有相同类型的列(例如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')])

2 个答案:

答案 0 :(得分:2)

此示例通过创建字符串生成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

答案 1 :(得分:1)

我解决了问题...

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))