python - 关于在python中迭代函数
问题描述
我使用 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 新手,所以我不知道该怎么做。谁能建议一种方法来做到这一点?
解决方案
只需在循环中重新分配回相同的变量。
如果需要,您还可以跟踪列表中的所有迭代(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]))]
推荐阅读
- postgresql - Hyperledger Explorer 错误 12 未实现:服务 protos.Endorser
- javascript - 如何在其他项目中放置一个侦听器以在云函数 Firebase 中复制该数据库的节点?
- javascript - 如何根据重力和运动角度改变速度
- html - 按类别显示图像(Ruby on Rails)
- android - 可以在 Destroy 上检查 saveInstanceState 吗?
- jquery - 按下提交按钮后,有没有办法延迟页面刷新?
- python - 在单个 Django 模板上显示来自 2 个模型的内容
- javascript - 将所有内容移至 1 个文件时无法启动我的服务器
- javascript - 获取 HTML 简单列表的项目
- python - 使用 Regex python 在代码中查找函数