【发布时间】:2023-04-02 09:14:01
【问题描述】:
我的任务是在 python 中编写一个简单的 MD-Simulation 程序,它不使用 python 内置类型(dict、list),而只使用 numpy 数组。据我了解,这允许编译代码以更快地运行。在我的代码中的某一时刻,我想从一个类似字典的对象中获取原子的质量,该对象可以通过元素名称(如MassDict['N'] = 14.0067)进行切片。
根据我的阅读,我需要使用结构化的 numpy 数组。我现在要做的是使用以下表格打开我的文件:
H 1.008
He 4.003
Li 6.941
然后构造一个结构化的numpy数组,可以使用第一列的元素名称进行切片。
我尝试制作两个 numpy 数组,然后将它们连接起来,但这似乎不是我需要的。我的代码一开始看起来并不那么好。那么如何创建一个 numpy 对象,该对象可以最佳地从文本文件中按字符串切片? 这是我的代码:
import numpy as np
import re
def mass_el(file):
with open(file) as inf:
for i, line in enumerate(inf):
pass
elements = np.empty((i+1),dtype='S2')
masses = np.empty((i+1),dtype=np.float32)
with open(file) as inf:
for i, line in enumerate(inf):
elements[i] = re.search('[a-zA-Z]+',line).group()
masses[i] = re.search('\d+[.]\d+',line).group()
#???
mass_el('elements.txt')
【问题讨论】:
-
你总共有多少个条目?只有那三个?
-
这就是第一个
with open... pass的用途。它计算行数并创建具有适当数量条目的np.empty数组。我在复制代码时是否弄乱了缩进?我认为数组需要向左缩进... -
但是你总共有多少个?如果只有三个,
dict很可能比np.ndarray更有意义 -
108 个 Element Mass 条目。顺便说一句,我不能使用 python 内置函数,因为它们显然不能被编译器加速。
-
您可能误解了使用
numpy的原因。正确使用这些数组会更快,因为它们使用已编译的代码。但是错误的使用(迭代)速度较慢。好的代码在适当的地方使用列表和字典。
标签: python file numpy structured-array