如何在Python中实现奇偶索引交替加减的周期性动态计算?
问题解决:数组按周期执行加减操作
需求说明
- 数组偶数索引元素执行加法,奇数索引元素执行减法
- 以6次为迭代周期,对应操作依次为+10、-20、+30、-40、+50、-60,周期循环执行
原始数组代码
import numpy as np # 修正原代码语法错误,保留基础数值 AA = np.array([[9.27914], [9.33246], [9.26303], [9.30597], [9.6594 ], [9.04283], [8.88866], [8.89956]])
预期结果
AA=np.array([ [19.27914], [-10.66754], [39.26303], [-30.69403], [59.6594], [-50.95717], [18.88866], [-11.10044], ])
错误尝试代码
max_iter = 6 iter = 0 for i in range(len(AA)): if i % 2 == 0: AA[i][0] = AA[i][0] + (iter % max_iter) else: AA[i][0] = AA[i][0] - (iter % max_iter) iter += 10
问题分析与解决方案
错误代码的核心问题是完全误解了周期操作的对应逻辑:
- 没有匹配预设的固定操作数序列,而是用错误的取模逻辑生成操作值
- 混淆了索引周期与操作数的对应关系
正确实现方式(循环版)
直接定义周期操作序列,通过索引对6取模循环获取操作数:
import numpy as np AA = np.array([[9.27914], [9.33246], [9.26303], [9.30597], [9.6594 ], [9.04283], [8.88866], [8.89956]]) # 定义6次周期的操作序列(减法等价于加负数) operations = [10, -20, 30, -40, 50, -60] for i in range(len(AA)): op = operations[i % 6] AA[i][0] += op print(AA)
高效实现方式(numpy向量化版)
利用numpy的向量化操作提升效率:
import numpy as np AA = np.array([[9.27914], [9.33246], [9.26303], [9.30597], [9.6594 ], [9.04283], [8.88866], [8.89956]]) operations = np.array([10, -20, 30, -40, 50, -60]) # 生成与数组长度匹配的循环操作数组 op_array = np.tile(operations, (len(AA) + len(operations) - 1) // len(operations))[:len(AA)] # 执行向量化加法 AA.flat += op_array print(AA)
以上两种方式均可得到预期结果。
内容的提问来源于stack exchange,提问作者stack offer
相关产品推荐
相关产品推荐

