1

非常に大きな (170 万レコード) csv ファイルを numpy レコード配列に読み込む必要があります。2 つの列は、datetime オブジェクトに変換する必要がある文字列です。さらに、1 つの列は、これらの日時間の計算された差である必要があります。

現時点では、リストのリストを作成するカスタム イテレータ クラスを作成しました。次に、np.rec.fromrecords を使用して配列に変換します。

しかし、datetime.strptime() を何度も呼び出すと、実際に速度が低下することに気付きました。これらの変換を行うためのより効率的な方法があるかどうか疑問に思っていました。時刻は、日付の範囲内で秒単位まで正確です。したがって、時間が均一に分布していると仮定すると (そうではありません)、必要な変換の 20 倍 (170 万 / (60 X 60 X 24)) を行っているように見えます。

不要な変換を行う前に、変換された値を辞書 {string dates: datetime obj} に保存し、最初に辞書をチェックする方が高速でしょうか?

または、numpy 関数を使用する必要がありますか (numpy ライブラリにはまだ慣れていません)。

4

1 に答える 1

0

私は間違っている可能性がありますが、あなたの問題が繰り返し発生しているように思えます。そのため、同じ変換を必要以上に行っています。 その解釈が正しい場合、最も効率的な方法は、反復回数によって異なります。170 万回のうち 100,000 回の繰り返しがある場合、辞書に 160 万回書き込み、170 万回チェックしても、160 万回 + 170 万回の読み取り/書き込みが行われるため、効率的ではない可能性があります。ただし、100 万回の繰り返しがある場合は、さらに 100 万回変換を行うよりも、それらに対して回答 (O(1)) を返す方がはるかに高速です。

ただし、全体として、python は非常に遅く、170 万の入力を使用していることを考えると、これをまったく高速化できない可能性があります。numpy 関数については、私もそれほど詳しくはありませんが、オンラインで適切なドキュメントがいくつかあると思います。

于 2012-07-20T18:54:54.477 に答える