File "structure_analysis4.py", line 16, in <module> positions1 = sort(pos1.get_positions()[indices1]) File "/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/build/tools.py", line 651, in sort tags = atoms.get_chemical_symbols() AttributeError: 'numpy.ndarray' object has no attribute 'get_chemical_symbols'
时间: 2024-01-03 16:03:33 浏览: 92
Oracle EBS 人力资源主要表结构
这个错误是由于你正在尝试使用 `sort()` 函数对一个 Numpy 数组进行排序,但是这个函数需要的是一个 ASE Atoms 对象。在你的代码中,你需要将 Numpy 数组转换为 ASE Atoms 对象,然后再使用 `sort()` 函数。
要解决这个问题,你可以使用 `Atoms()` 函数将 Numpy 数组转换为 ASE Atoms 对象,例如:
``` python
from ase import Atoms
# 获得第一个POSCAR中指定原子的位置列表
indices1 = [i for i, atom in enumerate(pos1) if atom.symbol == atom_type]
positions1 = pos1.get_positions()[indices1]
atoms1 = Atoms(symbols=[atom_type]*len(positions1), positions=positions1)
sorted_atoms1 = sort(atoms1)
# 获得第二个POSCAR中指定原子的位置列表
indices2 = [i for i, atom in enumerate(pos2) if atom.symbol == atom_type]
positions2 = pos2.get_positions()[indices2]
atoms2 = Atoms(symbols=[atom_type]*len(positions2), positions=positions2)
sorted_atoms2 = sort(atoms2)
```
在这个示例中,我们首先从原始的 POCSAR 文件中提取了我们感兴趣的特定原子的位置,并将它们转换为 ASE Atoms 对象。然后,我们使用 `sort()` 函数对这些 Atoms 对象进行排序,并获得了排序后的 Atoms 对象。最后,我们可以使用排序后的 Atoms 对象计算结构相似性。
注意,如果你想比较两个 Atoms 对象之间的距离矩阵,你需要使用 `atoms1.get_all_distances(atoms2)` 函数,而不是 `neighbor_list()` 函数。这个函数将返回一个二维矩阵,表示 atoms1 中每个原子到 atoms2 中每个原子的距离。
阅读全文