列表和numpy数组python

问题描述 投票:-1回答:1

我实际上有多个相关问题。

我有以下课程:

class environment_step:
    def __init__(self,solar,battery,allocation,G1,G2):
        self.solar = solar
        self.battery = battery
        self.allocation = allocation
        self.G1 = G1
        self.G2 = G2

    def step(self):
        self.residual = self.solar+self.battery-self.allocation
        self.reward = min(0,max(self.residual*self.G1,self.residual*self.G2))
        self.cost = -self.reward
        self.battery = max(0,self.residual)
        return self.reward, self.cost, self.battery

我如下使用它

reward = []
B = np.zeros(1)
allocation = np.ones(1)*12
G1 = np.ones(24)
G2 = np.ones(24)*2
solar = np.random.rand(24)
for t in range(24):
    environment = environment_step(solar[t], B, allocation, G1[t], G2[t])
    R, C, B = environment.step()
    reward.append(R)

其中太阳能,电池,分配,G1和G2是numpy阵列。当我检查R时,如果它是0,那么我只会得到0,但是对于不同于零的值,我会得到[[-2.114]]或任何数字。为什么我得到的不是[-2.114]

我使用不同的条目值多次运行环境,并将R附加到列表奖励中。该列表如下所示:[0, 0, array([[-2.114]], dtype = float32), 0, array([[-1.324]], dtype = float32)]。我将列表奖励由reward = torch.tensor(reward, dtype=torch.float32)转换为pytorch张量。当列表以0开头时,如我在示例列表中所示,它可以正常工作。但是,如果列表以非零开头(例如[array([[-2.114]], dtype =float32) 0, 0, 0, array([[-1.324]], dtype = float32)]),则出现错误TypeError: not a sequence。我怀疑问题是数组的双尖括号,但我不确定。这就是为什么我想在之前解决此问题(上段)。

尽管,尽管我正在使用火炬张量,但我认为问题在数组之前就已经发生了。那么,假设[1.2, 1.42, 3.13][array([1.2], dtype=float32), array([1.42], dtype=float32), array([3.13], dtype=float32)]有什么区别?甚至相同,但带有双括号(我的情况)。我知道列表是通用的并且允许文本,而数组只允许数字,但是从这个看来似乎还有更多,但我不确定。我将不胜感激!

编辑:我添加了一个最小的工作示例。

python arrays list numpy pytorch
1个回答
0
投票

我能够通过执行此操作解决问题

R[0], B[0], C[0] = environment.step()

与我最初描述的相反。我写这个是为了对某人有用。我的列表现在看起来像这样:[array([-1.23]), array([-2.32]), array([0.])],这更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.