是否可以为所有列只定义一次数据类型?
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))
如果所有列的类型相同(例如 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))