我有2个数据集x1和x2。我希望能够仅在“发件人”列中包含“奥克兰”的行中获得x1和x2的所有乘积的总和。 see here
最后的答案应该是(5 * 1)+(2 * 1)+(3 * 1)+(4 * 1)或14。我为此写的PuLP代码如下
# Import PuLP modeller functions
from pulp import *
varFinal = sum([x1[a] * x2[a] for a in Arcs if a == Nodes[0]])
print Nodes[0]
print Arcs[0]
Final = varFinal
打印到控制台的输出是
奥克兰
(“奥克兰”,“阿尔巴尼”)
我意识到我的最终值为零,因为Arcs [some number]不等于Nodes [some number]。反正有没有更改代码,所以我的最终值为14?
感谢您的帮助。
答案 0 :(得分:0)
欢迎堆栈溢出!因为您只发布了部分代码,所以我不得不猜测您正在使用哪种数据类型。从输出中,我猜测您的Nodes
是字符串,而您的Arcs
是字符串元组。
您的尝试非常接近,您希望from列中包含Auckland。您可以像在数组中一样对一个元组建立索引,因此您想这样做:a[0] == Nodes[0]
。
下面是一个自包含的示例,其中数据的第一位输出以下内容(请注意,我已更改为python 3.x打印语句(带括号)):
输出:
Auckland
('Auckland', 'Albany')
14
代码:
# Import PuLP modeller functions
from pulp import *
# Data
Nodes = ['Auckland',
'Wellington',
'Hamilton',
'Kansas City',
'Christchuch',
'Albany',
'Whangarei',
'Rotorua',
'New Plymouth']
Arcs = [('Auckland','Albany'),
('Auckland','Hamilton'),
('Auckland','Kansas City'),
('Auckland','Christchuch'),
('Wellington','Hamilton'),
('Hamilton','Albany'),
('Kansas City','Whangarei'),
('Christchuch','Rotorua')]
x1_vals = [1, 2, 3, 4, 5, 9, 11, 13]
x2_vals = [5, 1, 1, 1, 1, 1, 1, 1]
x1 = dict((Arcs[i], x1_vals[i]) for i in range(len(Arcs)))
x2 = dict((Arcs[i], x2_vals[i]) for i in range(len(Arcs)))
varFinal = sum([x1[a] * x2[a] for a in Arcs if a[0] == Nodes[0]])
print(Nodes[0])
print(Arcs[0])
print(varFinal)
供以后参考,如果您包含其他人可以尝试运行的代码(没有外部数据依赖性),那么人们很可能会尝试运行,修复它并重新发布它。 / p>