如何从scipy.constants.physical_constants导入物理常数?

0ve6wy6x  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(130)

我正在尝试从scipy.constants.physical_constants导入electron volt-joule relationship用于数值物理问题。这可能是一个非常简单的问题,或者是对physical_constants字典的误解,但在谷歌上搜索了2个小时后,我仍然不知所措。
我试过了
from scipy.constants.physical_constants import electron volt_joule relationship
我也试过
import scipy.constants.physical_constants["electron volt-joule relationship"]
它产生
File "<ipython-input-22-7c2fb3ec2156>", line 3 import scipy.constants.physical_constants["electron volt-joule relationship"] ^ SyntaxError: invalid syntax
我是否误解了这些物理常数的用法?从scipy.org文档中,我看到它们的形式为physical_constants[name] =(value,unit,uncertainty)
这样我就能
print(scipy.constants.physical_constants["electron volt-joule relationship"])
为了能返回
(1.602176634e-19, 'J', 0.0)
但甚至
import scipy.constants.physical_constants
返回错误

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-21-b4d34ca28080> in <module> 
----> 1 import scipy.constants.physical_constants

ModuleNotFoundError: No module named 'scipy.constants.physical_constants'

这个常量库是否充满了可以引用的值、单位和不确定性,但实际上并不用于计算的值?

uqjltbpv

uqjltbpv1#

看起来原创者的import语句格式不正确。要访问常量,请包含以下import语句:

from scipy import constants

然后,要访问特定常量,请尝试:

print(constants.electron_volt)

returns:
1.602176634e-19

如果找不到scipy包,可以使用以下命令添加它:

pip install scipy
a8jjtwal

a8jjtwal2#

因为'electron volt_joule relationship'是python字典scypy.constants.physical_constants中的一个键,所以它不能被导入,而整个字典可以被导入。作为例子,让我们加载scipy.constantsphysical_constants,还有astropy.constants

import scipy.constants as syc
import astropy.constants as ayc
from scipy.constants import physical_constants as pyc

请注意:

print(type(syc),type(ayc),type(pyc))

返回值:<class 'module'> <class 'module'> <class 'dict'>。您还可以使用函数dir来研究sycaycpyc的内容,或者将其简化为一个lambda函数,我喜欢调用tab,定义如下:

tab = lambda obj: [atr for atr in dir(obj) if '__' not in atr]

tab(pyc)将返回python字典的属性和方法,如dict.keys()dict.values()。在pyc.keys()中有一个名为'electron volt_joule relationship'的属性和方法,它与所有pyc的内容或键一样,返回一个元组,包含此定义的值、单位和不确定性:

v,u,uc = pyc['electron volt_joule relationship']

因此v是一个值,u是物理单位,uc是不确定度。

print(f'1eV = {v}{u} \u00B1 {uc}{u}')

将打印关系:

1eV = 1.602176634e-19J ± 0.0J

请注意,根据scipy,这个定义没有不确定性。还要注意,syc下面直接有一个eV:

print(syc.eV)
1.602176634e-19

它恰好在数值上等于一个电子的电荷的绝对值(密立根在1909年首次测量),或称基本电荷,单位为库隆布,也表示为syc.elementary_charge。在我们以astropy为例的例子中,ayp是一个特殊的类,它给出了物理单位和常数值。要了解它,只需在jupyter笔记本中键入ayc.e,例如:

ayc.e
1.6021766×10−19C

以及:

print(ayc.e)

将给予:

Name   = Electron charge
Value  = 1.6021766208e-19
Uncertainty  = 9.8e-28
Unit  = C
Reference = CODATA 2014

因此在ayc.e下还有其他重要的属性:

print(f'{ayc.e.name} = {ayc.e.value}{ayc.e.unit} \u00B1 {ayc.e.uncertainty}{ayc.e.unit} ')
Electron charge = 1.6021766208e-19C ± 9.8e-28C

我们可以看到,根据astropy,有一个小的不确定性与电荷的基本单位有关,它毕竟必须与定义的eV与J关系的不确定性有关。

相关问题