Python新手疑问:为何程序生成长度1000数组而非50000且前50值为0?
问题原因分析
疑问1:列表长度为何是1000而非50000?
- 你生成的
arr_initial_x是二维numpy数组(形状为(1, 50)),用for m in arr_initial_x遍历它时,只会循环1次——因为遍历的是数组的第一维度,而第一维度的长度只有1,每次取到的是包含50个初始值的整个数组,而非单个初始值。 - 外层循环遍历1000个growthrate值,每次内层循环仅向
l添加1个元素,最终l的长度自然是1000。 - 要实现遍历50个初始值的需求,只需把二维数组展平为一维,比如将内层循环改为
for m in arr_initial_x.flatten()。
疑问2:列表前50个值为何均为0?
np.linspace(0, 4, 1000)生成的是从0到4均匀分布的1000个数值,前50个值非常接近0(第一个值就是0)。- 你的迭代公式是
v[i+1] = k * v[i] * (1 - v[i]),当k趋近于0时,每次迭代后的数值都会快速衰减,经过100次迭代后,结果会趋近于0,因此l的前50个元素全为0。
修正后的代码示例
import numpy as np arr_growthrates = np.linspace(0, 4, 1000) arr_initial_x = np.random.random((1, 50)) l = [] for k in arr_growthrates: # 展平数组,逐个遍历初始x值 for m in arr_initial_x.flatten(): iteration = 100 v = [m] for i in range(iteration): v.append(k * v[i] * (1 - v[i])) l.append(v[100]) print(len(l)) # 输出50000 print(l)
内容的提问来源于stack exchange,提问作者cookiecainsy
相关产品推荐
相关产品推荐

