'''构建特征的向量空间'''
#建立个队列,先进先出
mem_num=1
pre=4
from collections import deque
deq=deque(maxlen=mem_num)
X=[]
for i in sca_X:
deq.append(list(i))
if len(deq)==mem_num:
X.append(list(deq))
print(X)
X_lately=X[-pre:]
X=X[:-pre]
print(len(X)) #这个少的数量与mem——num是有关系的,
print(len(X_lately)) #2 跟shift的值有关系
不是很理解这段代码为什么前后的X长度会变化,经过队列之后的X的长度比原本少mem_NUM-1
在上述代码中,当 mem_num
成功满足后,每当我们向 deque 中添加一个新元素,deque 会自动从头部删除一个元素,以使 deque 的长度恒定为 mem_num
。 同时,该被删除的元素不能作为下一个mem_num长的序列的一部分,并且已经添加到 X
中。这解释了为什么在完成队列操作之后,会少 mem_num-1
行数据。
具体来看,在 looop 中首次执行添加到 X 前,列表 deq 是空的,因此我们没有添加任何内容到 X。无论迭代多少次,只有在长度为 mem_num 时,才会放入完整的 n-timesteps 数组(由于我们将其转换为一个列表)到 X
中。
例如,假设我们有以下散列值:[1,2,3,4,5,6,7,8,9]。并且设置了 mem_num=3
。下面是数字插入到 deque 中的迭代:
第一步:deque([1])
第二步:deque([1, 2])
第三步:deque([1, 2, 3]) -> X.append(list(deq))
在第三步之后,X
包含一个数组即 [[1,2,3]],并且 deque 删除了其从头部开始的某个元素,现在大小为 2.最终结果,我们创建的 X
少mem_num-1的原因就是缺少填满 deque 前部的第一个 mem_num-1 个元素。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这段代码中,通过使用Python中的collections模块中的deque双端队列来构建特征的向量空间。队列是一种数据结构,具有先进先出(FIFO)的特点,可以将数据按照一定顺序进行排列,并可以方便地进行添加、删除等操作。
具体地,这段代码中,首先通过deque(maxlen=mem_num)创建了一个最大长度为mem_num的双端队列deq。接着,将sca_X中的每个元素(假设sca_X是一个二维列表)转换为列表,并将其添加到deq中。当deq的长度达到mem_num时,将deq中的元素转换为列表,并添加到列表X中。注意,由于X是一个列表,所以每次添加的元素也是一个列表。
最后,将X中的后pre个元素(即最近加入的pre个元素)赋给X_lately,将X中除了最后pre个元素之外的所有元素赋给X。因此,X的长度减少了pre,而X_lately的长度恰好为pre。
具体来说,如果mem_num=1,即每次只添加一个元素到队列中,那么X中的每个元素也只包含一个元素。而如果mem_num大于1,每次添加的元素是一个列表,因此X中的每个元素也是一个列表,其长度等于mem_num。由于最后赋给X_lately的是X中的后pre个元素,因此X的长度减少了pre,而X_lately的长度为pre。
如果你在使用这段代码时发现长度计算不正确,可以检查mem_num和pre的值是否正确,以及sca_X是否包含了足够的数据。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢