web-dev-qa-db-ja.com

python)のリスト/配列にキューをダンプします

私はいくつかのスレッドを実行していて、そこで結果をキューに収集しています。インデックスを作成してそれらの結果を取得できるように、配列またはリストにダンプしたいと思います。キュー内の各要素は、次元nの配列です。それらの配列にアクセスしたいと思います。教えていただけませんか、どうすればよいですか?

 def dump_queue(model_queue):
 queue_list = []
 for i in iter(model_queue.get,'STOP'):
         queue_list.append(i)
  return queue_list




aux_model=train_svm(np.array(trainExample),np.array(trainLabel))
model_queue.put(aux_model.coef_)

したがって、配列はsvmの学習されたモデルパラメーターです。 model_queueはスレッド間で共有されます。モデルパラメータの各エントリではなく、各モデルパラメータベクトルにアクセスしたいと思います。

11
thetna

並列部分が完了し、結果をリストで取得したいだけですよね?次に、試してください:

list(my_queue.queue)

例:

from queue import Queue

q = Queue()
for i in range(5):
    q.put(i)

l = list(q.queue)
print(l)

出力:

[0, 1, 2, 3, 4]
35
grovina

同じ問題かどうかはわかりませんが、同じことをする必要があり、結局これを書きました。 python 2.7。でthreading.ThreadとQueueオブジェクトを使用していて、キューをリストにダンプしたかっただけです。

def queue_to_list(q):
    """ Dump a Queue to a list """

    # A new list
    l = []

    while q.qsize() > 0:
        l.append(q.get())
    return l
3
robrant

私は次の解決策を採用します:

from collections import deque
q = deque()
for i in range(5):
    q.append([i,i+10])
listed_q = list(q)

これで、インデックスを作成したりスライスしたりすることで、値に簡単にアクセスできます。

print listed_q[1]        # [1, 11]
print listed_q[1][1]     # 11

List()はqのコピーを作成するため、キューの次元に注意する必要があります。この操作を実行するために必要な時間は、キューが長くなるほど長くなります。別のアプローチは、結果をリストに保存する前に最初にキューをスライスするitertools.isliceを使用することで見つけることができます。次のリンクを確認してください(パフォーマンス測定値もそこに記載されています)。

collections.dequeでスライス表記を使用

両端キューをスライスする方法は?[重複]

1
Jannick

ガブリエルが言ったように、あなたはあなたの質問を特定するべきです。

配列について話すとき、私はあなたがリストを参照すると思います。 Python配列は数値を格納するために使用されます。

ただし、キューをネストされたリストに変換するためにできること:#出力リスト:

collectedData = list()
# # # 
# for every thread, call:
threadBuffer = [item for item in q.queue]
collectedData.append(threadBuffer)

これにより、次の例のように、簡単にアクセスできるネストされたリストにデータが収集されます。

l = list()
l.append([1,2,3,4,5,6,7,9,10])
l.append([6,7,8,9,0,11,22,33])

これで、自由にアクセスできます:l [1] [2]-> 8

これはあなたを助けますか?

よろしく、クリスチャン

1
Skineffect