执行此代码:
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
以获得不变格的数组?
答案 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'。它们不兼容。