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)

配列の元の形状に変化があるのはなぜですか? この変化の原因は何ですか?私は基本的に元のnumpy配列をtime列ごとにソートしようとしているので、dtype. しかし、次元の変更後、配列をソートできません

>>> x=np.sort(allRics,order='time')

上記のコマンドの出力に変更はありません。アドバイスをお願いできますか?

4

2 に答える 2

3

配列を構造化配列に変換しています。基本的に、2D 配列ではなく、構造体の 1D 配列として扱われるようになりました。以下の簡単な例を見てください。

>>> 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 に答える