求助:numpy计算后数组从314长度异常扩张至4710万维度
问题:Numpy数组计算后长度异常膨胀
自定义lane_emden(n)函数输出的theta数组经切片后长度为314(所有值均大于0),但经过np.log10等计算后,rho_log、m、p_log的长度却变为47100000,期望这些输出数组长度仍为314,不清楚问题出在哪里,是否与numpy的log10函数有关?
附上代码:
rho_c = 150000 #kg/m3 P = 26.5*(10**15) G = 6.67*(10**-11) r = 696340000 n=1 xi,theta=lane_emden(n) theta = theta[:-1] xi = xi[:-1] print(theta) print(np.shape(theta)) rho_log = np.log10(theta*rho_c) print(np.shape(rho_log)) m = 4*np.pi*(r**2)*(10**rho_log) print(np.shape(m)) p_log = np.log10(-G*m*rho_c/(r**2)) print(np.shape(p_log))
分析与解决
问题根源
问题出在**theta是Python列表而非Numpy数组**。当Python列表与整数执行*运算时,会触发列表的重复操作(将列表元素重复整数次),而非元素级别的乘法。
你的theta长度为314,rho_c=150000,所以theta*rho_c会生成一个包含314*150000=47100000个元素的列表,后续np.log10处理这个长列表,自然得到同样长度的Numpy数组,后续计算也会基于这个长数组,导致所有输出长度异常膨胀。
解决方法
只需将theta转换为Numpy数组,确保执行元素级乘法:
修改代码中切片后的theta赋值语句:
theta = np.array(theta[:-1]) xi = np.array(xi[:-1])
或者直接修改lane_emden函数,使其返回Numpy数组而非Python列表。
这样theta*rho_c就会执行Numpy的元素级乘法,结果仍为长度314的数组,后续所有计算的输出长度也会保持314。
内容的提问来源于stack exchange,提问作者Kristen
相关产品推荐
相关产品推荐

