Python遍历一个列表并每n次迭代追加n个值

2024-03-29 11:09:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个深度强化学习问题,需要反馈给代理的状态包含在一个二进制数向量中。你知道吗

列表如下所示:

[7.0, 1.0, 1.0, 0.0, 1.0, 5.0, 0.0, 1.0, 0.0, 1.0, 
 7.0, 1.0, 1.0, 0.0, 1.0, 6.0, 1.0, 0.0, 1.0, 0.0]

然而,我的问题的每一个完整的状态每5次迭代就包含一次。样本数据的完整状态示例如下:

[[7. 1. 1. 0. 1.]]
[[5. 0. 1. 0. 1.]]
[[7. 1. 1. 0. 1.]]
[[6. 1. 0. 1. 0.]]

我尝试过创建一个解析器函数,类似于滑动窗口,它应该每5次迭代捕获5个值。你知道吗

def getState(data, timestep, window):
    parser_start = timestep - window + 1
    block = data[parser_start:timestep + 5] if parser_start >= 0 else data[0:timestep + 5] # pad with t0
    res = []
    for i in range(window - 1):
        res.append(block[i])

    return np.array([res])

然后实现到类型的for循环中:

window_size = 5    
for t in range(10):
        next_state = getState(data, t + 4, window_size + 1)    
        print(next_state)

但是,运行循环时得到的结果是:

[[7. 1. 1. 0. 1.]]
[[1. 1. 0. 1. 5.]]
[[1. 0. 1. 5. 0.]]
[[0. 1. 5. 0. 1.]]
[[1. 5. 0. 1. 0.]]
[[5. 0. 1. 0. 1.]]
[[0. 1. 0. 1. 7.]]
[[1. 0. 1. 7. 1.]]
[[0. 1. 7. 1. 1.]]
[[1. 7. 1. 1. 0.]]

它似乎附加了一个滑动窗口1,而不是5。我已经试了好几个星期了,但找不到问题出在哪里。你知道吗

你们有什么新想法吗?你知道吗


Tags: inparserfordatasize状态rangeres
1条回答
网友
1楼 · 发布于 2024-03-29 11:09:45

窗口大小应一致

[data[i:i+5] for i in range(0,len(data),5)]

[[7.0, 1.0, 1.0, 0.0, 1.0],
 [5.0, 0.0, 1.0, 0.0, 1.0],
 [7.0, 1.0, 1.0, 0.0, 1.0],
 [6.0, 1.0, 0.0, 1.0, 0.0]]

相关问题 更多 >