我正在尝试将一些东西从Java移植到Python,我很好奇如何转换这个方法。它用于初始化具有2个不同变量的2D数组。以下是Java中的代码:
private void initialiseQvalues() {
qTable = new float[numStates][numActions];
// set q values initially to 0
for (int i = 0; i < numStates; i++) {
for (int j = 0; j < numActions; j++) {
qTable[i][j] = 0.0f;
}
}
}
我通过这个函数将其带到Python中:
def initialiseQvalues(self, numStates, numActions):
self.qTable = [numStates][numActions]
for i in range(0, numStates):
for j in range(0, numActions):
self.qTable[i][j] = 0.0
但是,我得到以下错误:
File "C:\Users\ninja\OneDrive\Desktop\Stuff\FYP\Gridworld\Agent.py", line 27, in initialiseQvalues
self.qTable = [numStates][numActions]
IndexError: list index out of range
我读过关于列表压缩和其他2D数组的方法,但是对于具有两个不同变量(NumStates、numActions)的2D数组,我没有看到任何东西
Python使用列表进行正常处理,这些列表接近Java ArrayList对象。因此,您只需初始化一个包含
numStates
(子)列表的列表,每个列表都包含numActions
操作。如果使用显式循环,则附加到列表要比直接构建列表列表容易得多。因此,您可以使用:但真正的Python方式是使用理解:
Python有一个包含列表列表的初学者陷阱(或者更一般地说是包含可变对象的容器):朴素的
[[0.0] * numStates] * numActions]
生成一个包含对同一对象的引用的外部列表。演示:更改子列表中的元素会更改所有其他子列表中的相同元素,因为外部列表只包含对同一内部对象的一组引用
为了初始化
n
重复值列表,可以使用乘法运算符,如下所示:相关问题 更多 >
编程相关推荐