在python中将队列转储到列表/数组中

2024-09-19 21:04:10 发布

您现在位置: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的学习模型参数。模型队列在线程之间共享。我想访问每个模型参数向量,而不是模型参数的每个条目。


Tags: 模型元素列表参数model队列queuedef
3条回答

我将采用以下解决方案:

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,在将结果存储在列表中之前,首先对队列进行切片。请查看以下链接(此处还提供了性能度量):

Use slice notation with collections.deque

How to slice a deque? [duplicate]

不知道是不是同一个问题,但我需要做同样的事情,最后写了这个。我在Python2.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

你已经完成了平行部分,只想在列表中得到结果,是吗?然后尝试:

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]

相关问题 更多 >