首页 > 解决方案 > ValueError:具有多个元素的数组的真值不明确。尝试找到最大值时会出现使用 a.any() 或 a.all()

问题描述

我知道这个问题被问了很多,但答案对我来说仍然没有意义。

如标题所示,我收到错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-33-ff6e3e2d3ced> in <module>
      3     env = PIEnv()
      4     act = [1,2]
----> 5     env.step(act)
      6 

<ipython-input-32-cdba1f862773> in step(self, action)
     74             self.PV[i] = T  # Input the the Temperature Value
     75 
---> 76             [op, P, ierr] = self._pid(action, self.SP[i], self.PV[i], ierr)
     77 
     78             self.OP[i] = op

<ipython-input-32-cdba1f862773> in _pid(self, action, sp, pv, ierr, dt)
     52         if np.any(op >= opho) or np.any(op <= oplo):
     53             I -= action[1] * self.error * dt
---> 54             op = max(oplo, min(opho, op))
     55 
     56         return [op, P, I]

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

据我了解,如果我尝试进行布尔比较,例如在第 52 行中,我需要使用a.any()ora.all()由于,但我不明白为什么我需要或对于第 54 行,. 我只是想尝试获得最大值。任何人都可以解释一下吗?numpy.ndarraya.any()a.all()op = max(oplo, min(opho, op))

谢谢!

这是代码。这是一个属性。

    def _pid(self, action, sp, pv, ierr, dt=1):
    
        op0 = 0.0  # Initial Heater setting also considered the bias
        oplo = 0  # Heater Lower Limit
        opho = 100  # Heater Higher Limit
        
        self.error = sp - pv  # Error
        integral_error = ierr + action[1] * self.error * dt #Integral Error
        
        P = action[0] * self.error  # Proportional
        I = integral_error  # Integral
        
        op = op0 + P + I  # Calculates new output
        print(type(op>=opho))
        
        if np.any(op >= opho) or np.any(op <= oplo):
            I -= action[1] * self.error * dt
            op = max(oplo, min(opho, op))

        return [op, P, I]

标签: pythonnumpyboolean

解决方案


推荐阅读