【问题标题】:Regarding iterating a function in python关于在python中迭代函数
【发布时间】:2019-11-27 09:53:28
【问题描述】:

我使用 Python 编写了以下代码

import numpy as np

x1=np.array([1,2,3,4])
p1=np.array([.1,.2,.3,.4])

def fun1 (x_vec,p_vec):
    x11=np.zeros(len(x_vec))
    p11=np.zeros(len(p_vec))

    for i in range (0,len(x_vec)):
        x11[i] =x_vec[i]**2
        p11[i]=x11[i]*p_vec[i]

    return x11 ,p11

第一次迭代

x2=np.array(len(x1))
p2=np.array(len(p1))

x2 ,p2 = fun1(x1,p1)

第二次迭代

x3=np.array(len(x1))
p3=np.array(len(p1))

x3 ,p3 = fun1(x1,p2)

所以在第二次迭代中,我使用了从上一次迭代中获得的p2

第三次迭代

x4=np.array(len(x1))
p4=np.array(len(p1))

    x4 ,p4 = fun1(x1,p3)

    print("p",p2)
    print("x",x2)

    print("p",p3)
    print("x",x3)

    print("p",p3)
    print("x",x4)

基于此,我想要的输出是,(3 次迭代)

p [0.1 0.8 2.7 6.4]
x [ 1.  4.  9. 16.]
p [1.000e-01 3.200e+00 2.430e+01 1.024e+02]
x [ 1.  4.  9. 16.]
p [1.000e-01 3.200e+00 2.430e+01 1.024e+02]
x [ 1.  4.  9. 16.]

由于上面的代码手动更新了值,我需要在 Python 中使用 for 循环或一些迭代器来做同样的事情。

由于我是 Python 新手,所以我不知道该怎么做。谁能建议一种方法来做到这一点?

【问题讨论】:

    标签: python function for-loop iteration return-value


    【解决方案1】:

    只需使用 for 循环进行迭代:

    numOfIteration = 3
    for i in range(numOfIteration):
        x,p = fun1(x1, p1)
        p1 = p
        print("p", p)
        print("x", x)
    

    输出:

    p [0.1 0.8 2.7 6.4]
    x [ 1.  4.  9. 16.]
    p [1.000e-01 3.200e+00 2.430e+01 1.024e+02]
    x [ 1.  4.  9. 16.]
    p [1.0000e-01 1.2800e+01 2.1870e+02 1.6384e+03]
    x [ 1.  4.  9. 16.]
    

    【讨论】:

      【解决方案2】:

      只需在循环中重新分配回相同的变量。

      如果需要,您还可以跟踪列表中的所有迭代(results 此处)。

      import numpy as np
      
      
      def fun1(x_vec, p_vec):
          x11 = np.zeros(len(x_vec))
          p11 = np.zeros(len(p_vec))
      
          for i in range(0, len(x_vec)):
              x11[i] = x_vec[i] ** 2
              p11[i] = x11[i] * p_vec[i]
      
          return x11, p11
      
      
      x = np.array([1, 2, 3, 4])
      p = np.array([0.1, 0.2, 0.3, 0.4])
      
      results = [(x, p)]
      
      for i in range(5):
          x, p = fun1(x, p)
          print(i, x, p)
          results.append((x, p))
      

      输出

      0 [ 1.  4.  9. 16.] [0.1 0.8 2.7 6.4]
      1 [  1.  16.  81. 256.] [1.0000e-01 1.2800e+01 2.1870e+02 1.6384e+03]
      2 [1.0000e+00 2.5600e+02 6.5610e+03 6.5536e+04] [1.00000000e-01 3.27680000e+03 1.43489070e+06 1.07374182e+08]
      3 [1.0000000e+00 6.5536000e+04 4.3046721e+07 4.2949673e+09] [1.00000000e-01 2.14748365e+08 6.17673396e+13 4.61168602e+17]
      4 [1.00000000e+00 4.29496730e+09 1.85302019e+15 1.84467441e+19] [1.00000000e-01 9.22337204e+17 1.14456127e+29 8.50705917e+36]
      

      results 最终成为一个 2 元组列表:

      [(array([1, 2, 3, 4]), array([0.1, 0.2, 0.3, 0.4])),
       (array([ 1.,  4.,  9., 16.]), array([0.1, 0.8, 2.7, 6.4])),
       (array([  1.,  16.,  81., 256.]),
        array([1.0000e-01, 1.2800e+01, 2.1870e+02, 1.6384e+03])),
       (array([1.0000e+00, 2.5600e+02, 6.5610e+03, 6.5536e+04]),
        array([1.00000000e-01, 3.27680000e+03, 1.43489070e+06, 1.07374182e+08])),
       (array([1.0000000e+00, 6.5536000e+04, 4.3046721e+07, 4.2949673e+09]),
        array([1.00000000e-01, 2.14748365e+08, 6.17673396e+13, 4.61168602e+17])),
       (array([1.00000000e+00, 4.29496730e+09, 1.85302019e+15, 1.84467441e+19]),
        array([1.00000000e-01, 9.22337204e+17, 1.14456127e+29, 8.50705917e+36]))]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        • 2011-05-25
        相关资源
        最近更新 更多