python循环⽣成⼆维数组_嵌套循环⼆维数组的计算与构造-
python
我正在尝试使⽤Python进⾏计算。我想产⽣⼀个带有嵌套循环的20 * 20数组。我不知道我的⽅向是否正确,但这是我的代码:
w = 1.5
m = 0.556
E = np.linspace(15.4, 4.0, num=20)
u = np.linspace(0.29, 0.79, num=20)
Q = 0
for j in E:
for i in u:
Q = E * ( m / 1 + m ) * (1 - (w**2)/((w + u)**2)),
print Q
循环不产⽣20 * 20数组。如何使它正常⼯作?
python⼤神给出的解决⽅案
您似乎希望Q成为最终的20x20数组。 Numpy的⼀个关键点是,应尽可能避免for循环,因为它们⽐⽮量化数组操作要慢得多。有更快的⽅法可以从E和u构建2D阵列。
代码中的主要问题是,⾏Q = E * ( m / 1 + m ) * (1 - (w**2)/((w + u)**2))实际上只是将两个长度为20的数组逐个元素相乘400次,每次都⽣成相同长度的20数组Q。
也就是说,我们有两个长度为20的数组:
>>> (E * ( m / 1 + m ))
array([ 17.1248, 16.4576, 15.7904, 15.1232, 14.456 , 13.7888,
13.1216, 12.4544, 11.7872, 11.12 , 10.4528, 9.7856,
9.1184, 8.4512, 7.784 , 7.1168, 6.4496, 5.7824,
5.1152, 4.448 ])
>>> (1 - (w**2)/((w + u)**2))
array([ 0.29777473, 0.31797577, 0.33731751, 0.35584798, 0.37361193,
0.39065107, 0.40700429, 0.42270793, 0.43779594, 0.45230007,
python获取数组长度0.46625008, 0.47967384, 0.49259748, 0.50504555, 0.51704109,
0.52860578, 0.53976 , 0.55052296, 0.56091274, 0.5709464 ])
并将它们与*逐个元素相乘只会产⽣以下结果:
>>> E * ( m / 1 + m ) * (1 - (w**2)/((w + u)**2))
array([ 5.09933263, 5.2331181 , 5.32637834, 5.38156012, 5.40093407,
5.38660945, 5.34054752, 5.26457365, 5.16038825, 5.02957682,
4.87361888, 4.69389633, 4.49170089, 4.26824095, 4.02464786,
3.76198161, 3.48123612, 3.18334398, 2.86918086, 2.53956957])
相反,要将这两个长度为20的数组转换为所需的20x20数组,可以将for循环替换为以下⽮量化操作: >>> np.multiply.outer((E * ( m / 1 + m )), (1 - (w**2)/((w + u)**2)))
# the 20x20 array
这⾥,outer ufunc的multiply⽅法⽤于创建新的20x20数组。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论