0

我试图了解如何设置数组的 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')

上述命令的输出没有变化。你能建议吗?

4

2 回答 2

3

您正在将数组转换为结构化数组。基本上,它现在被视为结构的一维数组,而不是二维数组。下面看一个更简单的例子:

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

不排序的结构化数组无疑是一个错误。它看起来像是一种解决方法,因此实际上将数组声明为结构化数组:

>>> 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')])
>>> 
于 2012-09-11T03:08:04.760 回答
1

如果您只使用结构化数组进行排序,那么您可能可以避免一起使用结构化数组。您可以执行以下操作:

new_order = np.argosrt(allRics[:, 2])
x = allRics[new_order]
于 2012-09-11T03:52:54.097 回答