我使用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的新手,所以我不知道如何执行此操作。有人可以建议这样做吗?
答案 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.]