早上好,
我一直在互联网上搜索一个包含2个索引的列表或表格。目前我已为{1}}的1个索引构建代码,并使用此表达式mass = list(range(0,value(m.n)+1))
填充此列表。
但是现在我必须引入另一个具有两个索引的变量,如下面的mass[i] = value(m.mass[i])
。我试过x[i,j] = value(m.x[i,j])
。但我想要的是得到像x = []*value(m.ph)
这样的东西来说明我有一张像这样的表。值(m.n)为行和相位(m.ph)为列。
这样做的目的是使用此函数x = [value(m.n)]*value(m.ph)
绘制这些变量。 Idk如果可以像你想要的那样做这种列表,表格或矩阵,但知道它会非常有用,因为我因此而陷入困境。
我的代码如下:
plt.plot(time,x)
错误如下:
n = Param(initialize = 10, within = Integers)
N = Set(initialize = range(0,value(m.n)+1))
#What I got
x1 = [0,1,2,3,4,5,6,7,8,9,10]
x = list(range(0,value(m.n)+1))
for i in m.N:
x[i] = x1[i]
#What I try to do
ph = Param(initialize = 2, within = Integers)
Ph = Set(initialize = range(0,value(m.n)+1))
x2 = [[0,0],[1,1],[2,2],[3,3],[4,4]]
x = []*value(m.ph)
for i in m.N:
for j in m.Ph:
x[i,j] = x2[i,j]
非常感谢你。
编辑:我想要的是在Python中创建一个包含两个索引的列表,使得这些索引具有我需要的长度 File "C:/Users/Manuel/Desktop/StackExample.py", line 38, in <module>
x[i,j] = x2[i,j]
TypeError: list indices must be integers or slices, not tuple
和m.n = Param(initialize = 32, within = Integers)
定义的长度。
答案 0 :(得分:0)
使用词典而不是列表。字典可以被双重索引,这将使它们被元组索引。
编写参数应为:
paramName = Param(setOfIndiceA, setOfIndiceB, initialize=aDictionary)
其中setOfIndiceA
和setOfIndiceB
是包含字典的第一(A)和第二(B)索引的集合。
如果索引中的(a,b)
元组是稀疏的(并非集合A的所有值都对应于集合B的值,反之亦然),请使用一组元组,例如
listOfIndicesAB = [(1,1),(1,3),(2,1),(2,4)]
setOfIndicesAB = Set(initialize=listOfIndicesAB)
答案 1 :(得分:0)
我找到了两种将值从二维pyomo变量转换为二维列表的方法。我不确定这是否是您要找的内容,但我从标题中了解。我假设您用数字索引了变量
from pyomo.environ import *
model = ConcreteModel()
# Setup a two dimensional pyomo variable
model.set1 = RangeSet(0, 10)
model.set2 = RangeSet(0, 5)
# initialize with any number as example
model.variable = Var(model.set1, model.set2, initialize=3)
# do your optimization...
# Create an empty list with the same dimensions as the indexed variable
converted_list = [[None for j in range(len(model.set2))]
for i in range(len(model.set1))]
#call all touples and values from the variable class
#call the touple values from the dictionary and use them two index the list
for index in model.variable:
converted_list[index.__getitem__(0)][index.__getitem__(
1)] = model.variable[index].value
print(converted_list)
如果使用变量进行优化,这将为您提供初始化的数据或解决方案。
[[3,3,3,3,3,3],[3,3,3,3,3,3],[3,3,3,3,3,3],[3,3 ,3、3、3、3],[3、3、3、3、3、3],[3、3、3、3、3、3],[3、3、3、3、3、3 ],[3、3、3、3、3、3],[3、3、3、3、3、3],[3、3、3、3、3、3、3],[3、3、3 ,3、3、3]]
您可以从中调用这样的值:
print(converted_list[1][3])