我有这个代码:
#! /usr/bin/env python
import sys
import numpy
import math
inputfile=open(sys.argv[1],'r')
atoms=numpy.zeros((6,3),dtype='float64')
for line in inputfile:
sline=line.split()
header=sline[0]
for i in range(1,4,1):
atoms[i]=float(sline[i])
#print(float(sline[i]))
print(atoms)
输入文件的内容为:
O5 -2.978 -1.342 0.528
C1 -4.475 -1.062 0.491
C2 -4.710 -0.049 -0.519
C3 -4.193 1.266 -0.144
C4 -3.045 1.113 0.856
C5 -2.268 -0.070 0.555
我想提取坐标并将它们保存在称为原子的矩阵中。但是,我得到的矩阵的内容是:
[[ 0. 0. 0. ]
[-2.268 -2.268 -2.268]
[-0.07 -0.07 -0.07 ]
[ 0.555 0.555 0.555]
[ 0. 0. 0. ]
[ 0. 0. 0. ]]
这段代码有什么问题?
atoms
是一个 2D 数组,但您仅使用一个索引对其进行索引,因此 atoms[i]
指的是整行。当您将一个标量分配给这样的数组(的一个切片)时,该标量将被“广播”,即根据需要重复多次,以填充整个切片(即在本例中为一行)。