Python数组循环调用前值的状态迭代实现求助
问题分析与解决方案
你的代码存在的几个关键问题:
np.append()不会直接修改原数组,它会返回一个新数组,必须将返回值重新赋值给state才会生效。- 循环逻辑错误:当前写法是遍历
state里的每个元素,再对每个元素遍历所有随机数,这会生成大量冗余数据,不符合用前一个状态+下一个随机数生成新状态的迭代逻辑。 - 拼写错误:
np.apend应为np.append。
正确实现代码
按照你描述的类似Excel引用上方单元格的逻辑,我们需要每次取state的最后一个元素,结合random数组里的对应随机数生成新状态,逐个追加到数组中,直到用完所有随机数:
import numpy as np # 获取输入参数 pww = float(input("Pww Value: \n")) pdd = float(input("Pdd Value: \n")) lda = float(input("Lambda Value:")) # 生成3649个随机数的数组 random_nums = np.random.rand(3649) # 初始化状态数组,初始值为1 state = np.array([1]) # 遍历每个随机数,迭代生成新状态 for r in random_nums: # 取当前状态的最后一个元素 last_state = state[-1] if last_state == 1: new_state = 1 if r < pww else 0 else: new_state = 0 if r < pdd else 1 # 追加新状态并更新原数组 state = np.append(state, new_state) print(state)
高效优化版(可选)
np.append每次都会创建新数组,对于大数组效率偏低,可预先定义数组大小再填充,提升运行速度:
import numpy as np pww = float(input("Pww Value: \n")) pdd = float(input("Pdd Value: \n")) lda = float(input("Lambda Value:")) random_nums = np.random.rand(3649) # 预定义数组长度:随机数数量+初始状态1个 state = np.zeros(len(random_nums) + 1, dtype=int) state[0] = 1 # 逐个填充数组 for i in range(len(random_nums)): last_state = state[i] if last_state == 1: state[i+1] = 1 if random_nums[i] < pww else 0 else: state[i+1] = 0 if random_nums[i] < pdd else 1 print(state)
内容的提问来源于stack exchange,提问作者Lawrence
相关产品推荐
相关产品推荐

