python - 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.ndarray
a.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]
解决方案
推荐阅读
- javascript - 在导航中计算过滤的行数
- java - 将 JFoenix JFXDialogLayout 警报通知代码重构为更简单的形式,以便可以将其重用于其他类
- javascript - 哪个会更快?
- reactjs - 使用 Typescript 和 Union 接口从 React 组件中解构 Props
- r - 如何在 dbplyr 中使用自定义 SQL 函数?
- .net - VB.NET获取动态UserControl标签名
- python - 按键对字典进行排序不再显示值
- php - 使用 Ajax Jquery 访问 Php 返回的多维数组
- yacc - 使用 Jison,我如何扫描右移运算符和嵌套的泛型类型定义
- r - 按组计算因子的出现次数