私はいくつかのスレッドを実行していて、そこで結果をキューに収集しています。インデックスを作成してそれらの結果を取得できるように、配列またはリストにダンプしたいと思います。キュー内の各要素は、次元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はスレッド間で共有されます。モデルパラメータの各エントリではなく、各モデルパラメータベクトルにアクセスしたいと思います。
並列部分が完了し、結果をリストで取得したいだけですよね?次に、試してください:
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]
同じ問題かどうかはわかりませんが、同じことをする必要があり、結局これを書きました。 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
私は次の解決策を採用します:
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を使用することで見つけることができます。次のリンクを確認してください(パフォーマンス測定値もそこに記載されています)。
ガブリエルが言ったように、あなたはあなたの質問を特定するべきです。
配列について話すとき、私はあなたがリストを参照すると思います。 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
これはあなたを助けますか?
よろしく、クリスチャン