关于在python中迭代函数

时间:2019-07-18 12:51:38

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

我使用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.]

由于上述代码手动更新了值,因此我需要使用for循环或Python中的某些迭代器来执行相同的操作。

由于我是Python的新手,所以我不知道如何执行此操作。有人可以建议这样做吗?

2 个答案:

答案 0 :(得分:1)

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

如果需要,还可以跟踪列表中的所有迭代(此处为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]))]

答案 1 :(得分: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.]