为什么使用numpy.ndarray.astype将numpy.ndarray转换为自定义数据类型会增加我的数据?

时间:2015-02-26 07:10:23

标签: python arrays numpy type-conversion custom-data-type

执行此代码:

import numpy as np

py_list = [2013, 8, 0.6552562894775783]
custom_type = np.dtype([
                        ('YEAR',np.uint16),
                        ('DOY', np.uint16),
                        ('REF',np.float16)
                        ])

NumPy_array = np.array(py_list)
NumPy_array_converted = NumPy_array.astype(custom_type)

print 'custom_type is:'
print custom_type
print '---------------------------------------------'
print 'py_list is:'
print py_list
print '---------------------------------------------'
print 'NumPy_array is:'
print NumPy_array
print '---------------------------------------------'
print 'NumPy_array converted to custom_type is:'
print NumPy_array_converted
print '---------------------------------------------'

打印:

custom_type is:
[('YEAR', '<u2'), ('DOY', '<u2'), ('REF', '<f2')]
---------------------------------------------
py_list is:
[2013, 8, 0.6552562894775783]
---------------------------------------------
NumPy_array is:
[  2.01300000e+03   8.00000000e+00   6.55256289e-01]
---------------------------------------------
NumPy_array converted to custom_type is:
[(2013, 2013, 2013.0) (8, 8, 8.0) (0, 0, 0.6552734375)]
---------------------------------------------

1)问题是为什么在转换为自定义数据类型后,与未转换的numpy数组NumPy_array_converted相比,我的数据增加了三倍{?1}}

2)如何更改NumPy_array以获得不变格的数组?

1 个答案:

答案 0 :(得分:1)

np.array([tuple(py_list)], custom_type)

产生

array([(2013, 8, 0.6552734375)], 
  dtype=[('YEAR', '<u2'), ('DOY', '<u2'), ('REF', '<f2')])

结构化数组的数据应该是一个元组列表(或者只是一个元组)。注意值的显示方式。 [(...)]

可能有一种方法可以使用astype执行此操作,但这很棘手。

另外,请注意NumPy_array是什么 - 3个浮点数,而py_list是2个整数和浮点数。 custom_type想要将这两个整数转换为'u2'。它们不兼容。