You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:15:29