<p><a href="https://stackoverflow.com/a/61490065/982257">accepted answer</a>很好,只要您确信所使用的裸值在正确的维度上,它就可以工作。但是一般来说,使用<code>.value</code>并丢弃单位信息可能会有潜在的危险,使用<a href="https://docs.astropy.org/en/stable/units/" rel="nofollow noreferrer">Quantities</a>with units可以确保所有计算都是使用兼容的单位完成的</p>
<p>让我们看看指数中的指数,它通常应该是一个无量纲量</p>
<p>首先请注意,您从Astropy使用的所有常量都有单位:</p>
<pre><code>>>> from astropy.constants import h, c, k_B
>>> h
<<class 'astropy.constants.codata2018.CODATA2018'> name='Planck constant' value=6.62607015e-34 uncertainty=0.0 unit='J s' reference='CODATA 2018'>
>>> c
<<class 'astropy.constants.codata2018.CODATA2018'> name='Speed of light in vacuum' value=299792458.0 uncertainty=0.0 unit='m / s' reference='CODATA 2018'>
>>> k_B
<<class 'astropy.constants.codata2018.CODATA2018'> name='Boltzmann constant' value=1.380649e-23 uncertainty=0.0 unit='J / K' reference='CODATA 2018'>
</code></pre>
<p>然后声明了一些无单位值并将其与以下值混合:</p>
<pre><code>>>> T1 = 3750
>>> l = np.linspace(0, 1.5e-6, 1500)
>>> h*c/(h*c/(k_B*T1*l))
/home/embray/.virtualenvs/astropy/lib/python3.6/site-packages/astropy/units/quantity.py:481: RuntimeWarning: divide by zero encountered in true_divide
result = super().__array_ufunc__(function, method, *arrays, **kwargs)
<Quantity [0.00000000e+00, 5.18088768e-29, 1.03617754e-28, ...,
7.75578885e-26, 7.76096974e-26, 7.76615063e-26] J / K>
</code></pre>
<p>以焦耳/开尔文为单位给出<code>k_B</code>的结果,需要用正确单位中的一些值进行抵消。我猜<code>T1</code>应该是以开尔文表示的温度(我不确定<code>l</code>但假设它是J<sup>-1</sup>中的热力学β,尽管你应该仔细检查这个值应该是什么单位)</p>
<p>因此,您可能需要使用适当的单位声明这些值(顺便说一句,您可以通过定义一些ε并将其用作范围的起点来避免恼人的除以零):</p>
<pre><code>>>> from astropy import units as u
>>> eps = np.finfo(float).eps
>>> T1 = 3750 * u.K
>>> l = np.linspace(eps, 1.5e-6, 1500) * (u.J**-1)
</code></pre>
<p>现在,指数是一个无量纲的量:</p>
<pre><code>>>> h*c/(h*c/(k_B*T1*l))
<Quantity [1.14962123e-35, 5.18088882e-29, 1.03617765e-28, ...,
7.75578885e-26, 7.76096974e-26, 7.76615063e-26]>
>>> np.exp(h*c/(h*c/(k_B*T1*l)))
<Quantity [1., 1., 1., ..., 1., 1., 1.]>
</code></pre>
<p>(在这种情况下,无量纲值都非常接近于零,指数四舍五入为1。如果这不正确,那么您需要检查我关于单位的一些假设)</p>
<p>在任何情况下,这就是该库的使用方式,而您得到的错误是针对您的假设进行的故意安全检查</p>
<p><strong>更新:</strong>我在<a href="https://stackoverflow.com/questions/61494564/plotting-idealized-blackbody-spectra">your other question</a>中看到您为您的问题提供了更多的上下文,特别是指定<code>l</code>是以米为单位的波长(这是我的第一个猜测,但根据您给出的等式我不确定)</p>
<p>实际上,通过利用<em>等价性</em>,您可以避免在普朗克方程中直接使用<code>h</code>和<code>c</code>。在这里,您可以将<code>l</code>定义为以米为单位的波长:</p>
<pre><code>>>> l = np.linspace(eps, 1.5e-6, 1500) * u.m
</code></pre>
<p>并将其直接转换为光谱能量:</p>
<pre><code>>>> E = l.to(u.J, equivalencies=u.spectral())
>>> E
<Quantity [8.94615682e-10, 1.98512112e-16, 9.92560670e-17, ...,
1.32606651e-19, 1.32518128e-19, 1.32429724e-19] J>
</code></pre>
<p>然后在普朗克定律方程中写出指数,如:</p>
<pre><code>>>> np.exp(E / (k_B * T1))
/home/embray/.virtualenvs/astropy/lib/python3.6/site-packages/astropy/units/quantity.py:481: RuntimeWarning: overflow encountered in exp
result = super().__array_ufunc__(function, method, *arrays, **kwargs)
<Quantity [ inf, inf, inf, ..., 12.95190431,
12.92977839, 12.90771972]>
</code></pre>
<p>(这里它给出了一些接近低波长的无穷大,但是你可以通过剪切到一个更大的下限来避免)</p>