将大型数组变量(类型=对象)导出到CSV文件

em_*_*cee 5 python gekko

我使用Python中APM的Gekko解决了优化问题。两个主要决策变量(DV)是大型数组。该问题已成功收敛,但是,我需要Excel工作表中这些表的结果才能进行进一步的工作。

示例变量名是's'。由于在其中创建的数组Gekko是GKVariable / Object变量类型,因此我不能简单地使用:

pd.DataFrame(s).to_csv(r'C:\Users\...\s.csv')

因为结果为数组的每个单元提供了模型中定义的每个变量的标签(即v1,v2等)

print 's'在内核中使用会显示优化结果中的数组编号,但格式会由于列数众多而不能保证每一行都是矩阵的新行。

是否存在另一种解决方案,仅复制DV的结果值,使其成为常规np.array变量而不是对象类型变量?对此开放任何想法。

Joh*_*ren 1

您可以使用s[i].value[0]`` for steady state problems (IMODE=1 orIMODE=3 ) ors[i].value[:]``` 访问所有其他IMODE 选项的值数组。这是一个使用 pandas 和 numpy 将结果写入文件的简单示例。

import numpy as np
from gekko import GEKKO
import pandas as pd

m = GEKKO(remote=False)

# Random 3x3
A = np.random.rand(3,3)
# Random 3x1
b = np.random.rand(3,1)

# Ax = b
y = m.axb(A,b)
m.solve()

yn = [y[i].value[0] for i in range(3)]

print(yn)
pd.DataFrame(yn).to_csv(r'y1.csv')
np.savetxt('y2.csv',yn,delimiter=',',comments='')
Run Code Online (Sandbox Code Playgroud)