-1

numpy を使用してテーブルをセクションにスライスする

table = ['212:3:0:70.13911:-89.85361:3', '212:3:1:70.28725:-89.77466:7', '212:3:2:70.39231:-89.74908:9',  '212:3:3:70.48806:-89.6414:11', '212:3:4:70.60366:-89.51539:14', '212:3:5:70.60366:-89.51539:14', '212:3:6:70.66518:-89.4048:16']

t = np.asarray (table, dtype ='object')

numpy を使用してすべてをスライスしたい........... 212:3:0, 212:3:1k. '212:3:0:70.13911:-89.85361:3','212:3:1:70.28725:-89.77466:7'すべてv として欲しい

任意の dict (k,v) に変換します。これを行うためにforループを使用したくありません... forループが遅いため、これを行いました。

注: 行には「:」がありますが、「:」は辞書「:」を意味します。

4

2 に答える 2

2

辞書内包表記の基礎

何かを dict に変換するには、[[1,2],[3,4]]orのように 2 シーケンス (2 つの要素のシーケンスを生成するもの)を生成する iterable にする必要があります。[(1,2),(3,4)]zip([1,2,3,4], [5,6,7,8])

例えば

>>> mylst = [(1,2), (3,4), (5,6)]
>>> print dict(mylst)
{1:2, 3:4, 5:6}

そのため、タプルを生成するように各文字列を分割する必要があります。split_item2 つの文字列を取り、タプルを返すという、これを行う関数を既に作成している とします。次に、dict を作成するまですべてをメモリにロードする必要がないように、次のようなジェネレータ式を記述できます。

def generate_tuples(table):
    length = len(table)
    for i in range(1, length - 1):
        yield split_item(table[i-1], table[i])

次にdict、ジェネレーター関数でビルトインを呼び出すだけです。

>>> dict(generate_tuples(table))

あなたはすでにforループでこれを書いていると言っているので、すでにsplit_items関数が書かれていると思います。

高速化

これは、Ian Ozsvald によって書かれた高性能 Pythonのガイドで、処理速度を上げる他の方法を試すのに役立ちます。(@AndrewWalkerのSO投稿へのクレジットはこちら

于 2012-06-19T20:42:58.250 に答える
1

これはあなたが求めているものですか?

dict( (t.rsplit(':', 3)[0], t) for t in table ) )
于 2012-06-19T20:51:11.627 に答える