Python中定义特定时序递推循环的代码修正问题
问题根因
代码输出不符合预期是两处逻辑错误导致的:
- 误用循环变量
t参与sigma计算:第二次迭代时t=1,代码执行sigma = v*t +1,既给前序v值多加了常数1,又错误将t作为系数乘到v上 - 递推顺序不符合规则:该递推的初始条件为第一步sigma取全1矩阵,每轮迭代先用当前sigma计算对应v,下一轮的sigma直接复用本轮算出的v即可,不需要额外做算术变换。
修正后代码
import numpy as np N = 2 ar1 = [] ar2 = [] R = np.array([[1.1, 1.2, 1.3], [1.4, 1.5, 1.6], [1.7, 1.8, 1.9]]) # 初始化第一步的sigma为全1矩阵 sigma = np.ones((3, 3)) for _ in range(N): ar1.append(sigma) v = sigma * R ar2.append(v) # 下一轮sigma取当前轮计算得到的v sigma = v I1 = np.array(ar1) I2 = np.array(ar2) print("I1 =", [I1]) print("I2 =", [I2])
运行结果
执行上述代码将输出与预期完全一致的结果:
I1 = [array([[[1. , 1. , 1. ], [1. , 1. , 1. ], [1. , 1. , 1. ]], [[1.1, 1.2, 1.3], [1.4, 1.5, 1.6], [1.7, 1.8, 1.9]]])] I2 = [array([[[1.1 , 1.2 , 1.3 ], [1.4 , 1.5 , 1.6 ], [1.7 , 1.8 , 1.9 ]], [[1.21, 1.44, 1.69], [1.96, 2.25, 2.56], [2.89, 3.24, 3.61]]])]
优化说明:该实现去掉了循环中无意义的重复数组转换,将
I1、I2的数组转换操作放到循环结束后执行,运行效率更高。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

