【发布时间】:2018-12-02 22:10:48
【问题描述】:
我有以下双端队列对象:
test = deque([np.zeros((4,1,1))+0.5] * 25)
所以有 25 个某种形状的数组,我将在对象中追加,在另一端弹出旧的,等等。
在某些时候,我会想在我的双端队列中选择一个元素子集:
>>> idx = np.round(np.linspace(0, 20, 4, dtype='int'))
>>> idx
array([ 0, 6, 13, 20])
所以我想要这些指标。我试过了:
>>> test[idx]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: only integer scalar arrays can be converted to a scalar index
也许 deque 不支持这种类型的索引操作。如何轻松(有效)从test 获取idx 中的元素列表?
编辑——
关于我最初目标的更多信息。我有一个 3D numpy 数组的列表,即(N, H,W,3),并且我正在实时将一个新的 3D 数组转移到 N 的列表中,即一个大小为 (H,W,3) 的新数组被转移(像一个队列一样)到N 的列表。
如果所有东西都有一个形状为 (N, H,W,3) 的 numpy 数组会很好,但我不知道如何获得有效的队列功能,所以我选择了 deque。
【问题讨论】:
-
@miradulo 这似乎行得通——但这会有效吗?
-
这是在 Python 中使用一堆索引来索引双端队列的方法,这通常很慢。我不知道你在这里的工作总体上是否有效。我以前从未见过有人使用 NumPy 数组的双端队列.. 并且会认为向您的 NumPy 数组添加维度,固定大小并完全避免这种情况(如果可能的话)将是有效的做法。
-
我最初的想法是添加一个numpy数组索引并使用np.roll,但是发现这样做非常慢而不是使用deque。接受其他想法。
-
使用双端队列访问索引是
O(n),不像list。 Python 必须遵循 n 个链接才能到达对象。 -
@JDS 如果您添加了一些关于您实际解决的问题的信息,那么建议一个有效的解决方案会容易得多。
标签: python arrays numpy queue deque