Traceback (most recent call last): File "<stdin>", line 3, in <module> ValueError: operands could not be broadcast together with shapes (0,) (0,35,3)
时间: 2024-01-27 17:05:03 浏览: 71
Mac下anaconda中Spyder打开报错Traceback(most recent call last)…问题
5星 · 资源好评率100%
这个错误通常是因为某些POSCAR文件中没有C原子,导致`structure.get_chemical_symbols() == 'C'`的结果是一个空数组,从而无法将空数组与`structure.positions`相加。为了解决这个问题,可以在累加C原子坐标之前,先检查是否存在C原子,例如:
```python
from ase.io import read
import numpy as np
# 读取多个POSCAR结构文件
structures = read(['POSCAR1', 'POSCAR2', 'POSCAR3'])
# 计算所有C原子的坐标
C_positions = []
for structure in structures:
if 'C' in structure.get_chemical_symbols():
C_positions += structure.positions[structure.get_chemical_symbols() == 'C']
# 如果C_positions为空,则提示错误信息
if len(C_positions) == 0:
print('没有找到C原子!')
else:
# 计算C原子的平均位置
C_mean = np.mean(C_positions, axis=0)
# 计算C原子位置的标准差
C_std = np.std(C_positions, axis=0)
# 打印结果
print('C原子在晶胞中的平均位置:')
print(C_mean)
print('C原子在晶胞中的分布范围:')
print(C_std)
```
这段代码使用`if 'C' in structure.get_chemical_symbols():`判断POSCAR文件中是否存在C原子。如果存在,就将C原子的坐标添加到`C_positions`列表中。如果不存在,就跳过这个结构。如果C_positions列表为空,则输出一个错误信息。如果不为空,则计算C原子的平均位置和分布范围,然后打印结果。
阅读全文