3

私はpythonを学んでいるので、私に我慢してください。datetime 変数を numpy 配列に取得しようとしましたが、その方法を理解できませんでした。後で各インデックスの時刻の差を計算する必要があるため、datetime 変数を配列に入れる必要があるのか​​、それとも別のデータ型に変換する必要があるのか​​わかりませんでした。エラーが発生します:

'NoneType' object does not support item assignment

私の dtype 変数は正しく構築されていますか? これは日時型については何も言いません。

import numpy as np
from liblas import file

f = file.File(project_file, mode = 'r')
num_points = int(f.__len())
# dtype should be [float, float, float, int, int, datetime]
dt = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('i', 'u2'), ('c', 'u1'), ('time', 'datetime64')]
xyzict = np.empty(shape=(num_points, 6), dtype = dt)

# Load all points into numpy array
counter = 0
for p in f:
    newrow = [p.x, p.y, p.z, p.i, p.c, p.time]
    xyzict[counter] = newrow     
    counter += 1

前もって感謝します

編集:先に進む前に、配列を日付でソートする予定であることに注意してください。

p.time の形式は次のとおりです。

>>>p.time
datetime.datetime(1971, 6, 26, 19, 37, 12, 713269)
>>>str(p.time)
'1971-06-26 19:37:12.713275'
4

1 に答える 1

4

datetimeファイルからオブジェクトを取得する方法、またはそれが何であるかはよくわかりませんがp、タプルのリスト(リストではない、上記の私のコメントを参照)があると仮定すると、設定をすべて1つにできますステップ:

dat = [(.5, .5, .5, 0, 34, datetime.datetime(1971, 6, 26, 19, 37, 12, 713269)),
       (.3, .3, .6, 1, 23, datetime.datetime(1971, 6, 26, 19, 34, 23, 345293))]

dt = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('i', 'u2'), ('c', 'u1'), ('time', 'datetime64[us]')]

datarr = np.array(dat, dt)

次に、名前でフィールドにアクセスできます。

>>> datarr['time']
array(['1971-06-26T15:37:12.713269-0400', '1971-06-26T15:34:23.345293-0400'], dtype='datetime64[us]')

またはフィールドで並べ替えます。

>>> np.sort(datarr, order='time')
array([ (0.3, 0.3, 0.6, 1, 23, datetime.datetime(1971, 6, 26, 19, 34, 23, 345293)),
        (0.5, 0.5, 0.5, 0, 34, datetime.datetime(1971, 6, 26, 19, 37, 12, 713269))], 
  dtype=[('x', '<f4'), ('y', '<f4'), ('z', '<f4'), ('i', '<u2'), ('c', 'u1'), ('time', '<M8[us]')])
于 2013-11-08T23:02:38.473 に答える