我试着了解如何设置数组的dtypes。我原来的numpy数组维度是(583760,7),即583760行和7列。我将dtype设置如下
>>> allRics.shape
(583760, 7)
>>> allRics.dtype = [('idx', np.float), ('opened', np.float), ('time', np.float),('trdp1',np.float),('trdp0',np.float),('dt',np.float),('value',np.float)]
>>> allRics.shape
(583760, 1)
为什么阵列的原始形状有变化?是什么导致这种变化?我基本上试图按time
列对原始numpy数组进行排序,这就是我设置dtype
的原因。但是在尺寸改变之后,我无法对数组进行排序
>>> x=np.sort(allRics,order='time')
上述命令的输出没有变化。你能建议吗?
答案 0 :(得分:3)
您正在将数组转换为structured array。基本上,它不是2D数组,而是现在被视为一维结构数组。看一下下面的简单示例:
>>> import numpy as np
>>> arr = np.array([(1,2,3),(3,4,5)])
>>> arr
array([[1, 2, 3],
[3, 4, 5]])
>>> arr.shape
(2, 3)
>>> arr.dtype=[('a',int),('b',int),('c', int)]
>>> arr # Notice that tuples inside the elements
array([[(1, 2, 3)],
[(3, 4, 5)]],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>> arr.shape
(2, 1)
结构化数组未排序最为偶然bug。它看起来像是一个工作,所以实际上声明数组是一个结构化数组开头:
>>> arr_s = np.sort(arr, order='b')
>>> arr_s
array([[(1, 2, 3)],
[(3, 4, 5)]],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>> dtype=[('a',np.int64),('b',np.int64),('c', np.int64)]
>>> arr = np.array([(5,2,3),(3,4,1)], dtype=dtype)
>>> arr
array([(5, 2, 3), (3, 4, 1)],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>> arr_s = np.sort(arr, order='a')
>>> arr_s
array([(3, 4, 1), (5, 2, 3)],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>> arr_s = np.sort(arr, order='b')
>>> arr_s
array([(5, 2, 3), (3, 4, 1)],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>> arr_s = np.sort(arr, order='c')
>>> arr_s
array([(3, 4, 1), (5, 2, 3)],
dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
>>>
答案 1 :(得分:1)
如果您正在使用结构化数组进行排序,则可以完全避免使用结构化数组。你可以这样做:
new_order = np.argosrt(allRics[:, 2])
x = allRics[new_order]