【问题标题】:How to store values calculated within a loop如何存储循环中计算的值
【发布时间】:2020-02-07 17:33:21
【问题描述】:

我想将在每个循环中计算的值存储在一个数组中。

Q2 = np.array([20, 25, 30, 25, 20, 15, 10, 15, 20, 25, 30, 25, 20])
Q3 = np.array([40, 45, 50, 45, 40, 35, 30, 35, 40, 45, 50, 45, 40])


for i in range(13):   
    m = GEKKO()             # create GEKKO model
    x = m.Var(value=0)      # define new variable, initial value=0
    y = m.Var(value=0)      # define new variable, initial value=1
    z = m.Var(value=0)
    m.Equations([x - y == Q2[i], y + z == Q3[i],
                 K[0]*x**2 + K[1]*y**2 - K[2]*z**2 == 0]) # equations
    m.solve(disp=False)     # solve

    print([x.value, y.value, z.value]) # print solution

对于我期望得到的每个 Q(i):x.value(i)、y.value(i)、z.value(i)

现在它会打印所有答案,但我希望它存储在矩阵中。

【问题讨论】:

标签: python loops for-loop


【解决方案1】:

与上一个答案类似,您也可以使用 numpy 数组和列表来执行此操作。由于简单,我通常使用嵌套列表。

这是一个例子:

my_list = []
for i in range(3):
    my_list.extend([i,i*2,i*3])
print(my_list)

OUTPUT
[[0, 0, 0], [1, 2, 3], [2, 4, 6]]

【讨论】:

    【解决方案2】:

    如果一个新的pandas dataframe 对你有好处(我会这样做,因为它使结果更容易理解),你可以在循环之前创建一个空的dataframe

    df = pd.DataFrame(columns=['X', 'Y', 'Z'])
    

    并在每个循环结束时分配给它:

    df.loc[len(df)] = (x.value, y.value, z.value)
    

    【讨论】:

      【解决方案3】:

      您有 2 个解决方案,您可以创建一个包含 3 个数字(即 x、y 和 z)的类并创建该类的列表。所以基本上你会有这样的结构:

      容器类:int x 整数 诠释z

      然后你为你想要的每一对夫妇创建一个此类的对象,然后将它们存储到一个列表中。

      或者您可以创建 3 个列表,一个用于 x,一个用于 y,一个用于 z。 在每次迭代中,您都会将每个值存储在相应的列表中。 由于每个列表都有相同的索引,因此您只需要有一个索引值并在每个列表中检查给定值。

      【讨论】:

      • 没有理由使用列表,而不是 pandas dataframe / numpy array 结构。
      • 我不知道他的要求。当然,您可以使用库更轻松地做到这一点。我的帖子的主要内容是解释如何使用 python 从头开始​​
      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2021-04-17
      • 2021-06-25
      • 1970-01-01
      相关资源
      最近更新 更多