当在另一个文件中导入一个保存了多个NumPy数组的变量时,它只导入了最后一个数组
我在Python中使用一个叫ProDy的包来从PDB文件中提取坐标,我有一个包含两个.npz文件的列表。我想为每个文件得到一个只包含该文件中三列的数组,并且为了再加一列,我自己新增了一列。这在原始文件中似乎工作正常,在那里我有一个名为 'xyzfile' 的变量,它为每个文件存储一个数组。但当我尝试在另一个文件中导入这个变量时,它只导入了最后一个数组。这是我写的代码:
os.chdir("pocket_files")
files = os.listdir()
print(files)
['1b7fH.ag.npz', '1asyH.ag.npz']
for i in files:
var = np.load(i)
print(var)
coord = var['coordinates']
coord = coord.reshape(-1, 3)
radius = np.array([1.5])
radii = np.repeat(radius, len(coord))
radii = np.expand_dims(radii, axis=1)
xyzfile = np.concatenate((coord, radii), axis=1)
print(xyzfile.shape)
print(xyzfile.shape) 的输出是 (618, 4) (1527, 4),但在另一个文件中导入时:
from xyzrfile import xyzfile
print(xyzfile.shape)
(1527, 4)
它只打印出最后一个数组的形状。我需要的是能够把每个数组存到不同的变量中,这样也可以为每个数组创建一个单独的文件。
解决方案
当你执行 from xyzrfile import xyzfile 时,位于模块 xyzrfile 全局作用域中的该文件中的所有代码都会被执行,只有等到 import 语句完成后,导入脚本中的下一条语句才会执行。
在 xyrzfile 中的代码包含一个循环,依次把数组赋值给 xyzfile,并打印正在被赋值的当前数组的形状。当该循环结束时,xyzfile 指向的是最后一个被赋值的数组,import 语句也完成。因此,当导入脚本打印 xyzfile.shape 的值时,它会是最后一个被赋值给 xyzfile 的数组的形状。但你也应该看到在模块 xyzrfile 中的循环所打印出的所有数组的形状。
你可以尝试以下方法:
os.chdir("pocket_files")
files = os.listdir()
print(files)
['1b7fH.ag.npz', '1asyH.ag.npz']
xyzfiles = []
for i in files:
var = np.load(i)
print(var)
coord = var['coordinates']
coord = coord.reshape(-1, 3)
radius = np.array([1.5])
radii = np.repeat(radius, len(coord))
radii = np.expand_dims(radii, axis=1)
xyzfile = np.concatenate((coord, radii), axis=1)
xyzfiles.append(xyzfile)
print(xyzfile.shape)
现在你的导入脚本应该从模块 xyzrfile 导入变量 xyzfiles,而不是 xyzfile。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。