我已经从文件中创建了一个nd数组:
for i in range(int(atoms)):
next(finp)
for j in range(int(ldata[2])):
aatom[i][j] = [float(x) for x in
finp.readline().strip().split()]
我期待成为一个3d数组(i,j,x
)。但事实并非如此。将它转换为numpy数组后:
atom = np.array(aatom)
print(atom.shape)
yeilds:(250, 301)
这是i,j
的维度。但是,在我的思考过程中,确实是3d:
print(atom[1][1][:])
yeilds:
[-3.995, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
我在这里做错了什么?
答案 0 :(得分:1)
你的嵌套列表可能有不同的长度,迫使NumPy创建一个dtype=object
的数组,这意味着一个list
而不是float
的数组。
比较
a = [range(3), range(2)] # different lenghts in inner lists
aa = np.array(a)
print aa
print aa.shape # (2,)
print aa.dtype # dtype('O')
和
b = [range(3), range(3)] # equal lenghts in inner lists
bb = np.array(b)
print bb
print bb.shape # (2, 3)
print bb.dtype # dtype('int64')