【问题标题】:Numpy:How to select values from results?Numpy:如何从结果中选择值?
【发布时间】:2020-11-14 04:17:21
【问题描述】:

我想从 pyomo 抽象模型的列表结果中选择特定值。我有 240 个值,我想将其分成 10 个组并从每个组中提取值。我尝试将其作为数组并切片值的特定部分。但它不起作用。

有人可以帮我吗?谢谢!

代码:

...
for j in instance.J:
    for t in instance.T:
        print(value(instance.P[j,t]))

结果:

...
80.0
80.0
80.0
80.0
80.0
80.0
119.61130640682207
124.38162436892358
148.5439185323972
151.69344888703213
150.13095948759553
153.9634325088356
151.4005914397506
146.00465298729122
...

【问题讨论】:

  • 它是一个numpy数组吗?
  • 如果 instance.{J/T} 是 numpy 数组,您可以使用 instance.P[instance.J, instance.T] 代替 for 循环并在变量中获取结果。
  • 请提供一个可重现的例子和预期的结果。或者至少告诉我们instance 及其属性JTP 是什么。我将“列表结果”和“240 个值”解释为一维列表/数组,但您的 instance.P 似乎有两个维度。
  • np 数组切片可以工作 np.array(list).reshape(10,24)[0:,3:]
  • 很抱歉,J 是发电机数量(1-10),T 是小时数(1-24),P 是功率(如上图所示)。它不是 numpy现在数组。结果是上面显示的 240 个值,我认为它应该是一个一维列表。我想把它分成十组,用numpy提取结果。

标签: python numpy pyomo


【解决方案1】:

有问题的数据对象不是一个 numpy 数组,所以上面的 cmets(很遗憾)不起作用。该对象是一个 pyomo 模型对象。

Vivi- 你很亲密。您需要在执行操作时使用索引变量对对象进行索引。只需检查 .value 属性(请参阅下面的我的编辑)。您可以将所有这些东西放入一个列表中并忘记它们的索引(我认为这将是一个奇怪的选择),或者将它们放入 python 数据结构中,或者只是打印它们。

如果您想细分,您还需要以某种巧妙的方式切掉您拥有的双索引。或者只是切碎你之后放入的东西......

all_results = []
for j in instance.J:
    for t in instance.T:
        all_results.append(instance.P[j,t].value))   # <- note use of "value"

first_half = all_results[:len(all_results)//2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多