Python np.load用于多个文件
需要加载几个扩展名为Python np.load用于多个文件,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,需要加载几个扩展名为.npy的文件,并将其中的内容写入新数组 为什么那个代码不起作用?我应该改进什么 A = np.empty(0) for file in files: inf_from_every_file = np.load(file) A = np.append(A, inf_from_every_file) 正如评论中所指出的,不清楚你所说的“不起作用”是什么意思。假定文件包含格式为('a_file.npy')的文件名或路径,并且假定这些文件实际存在于当前工作目录或给
.npy
的文件,并将其中的内容写入新数组
为什么那个代码不起作用?我应该改进什么
A = np.empty(0)
for file in files:
inf_from_every_file = np.load(file)
A = np.append(A, inf_from_every_file)
正如评论中所指出的,不清楚你所说的“不起作用”是什么意思。假定
文件
包含格式为('a_file.npy'
)的文件名或路径,并且假定这些文件实际存在于当前工作目录或给定路径中,则代码应“正常工作”
但是,您的代码会将加载的数组展平,并将它们附加到一个大的1D数组中。这很可能不是你想要的,所以我假设这是你的问题
要用您的方法解决这个问题,您必须查看np.append
的axis
关键字
但是,在循环中附加到numpy数组通常是个坏主意,因为在每次append
过程中都会创建数组的完整副本。因此,您应该要么坚持使用一个后跟np的列表。concatenate
:
A = []
for fname in files:
inf_from_every_file = np.load(fname)
A.append(inf_from_every_file)
A = np.concatenate(A)
…或者您应该从一开始就初始化整个空数组,然后通过索引向其添加值:
A = np.empty( (len(files),) + np.load(files[0]).shape )
for index,fname in enumerate(files):
A[index,...] = np.load(fname)
注意,如果不知道应该加载的数组的形状,初始化A
的行会变得有点复杂。这里,我从列表中加载第一个数组以获取形状信息。如果您已经知道形状是,例如(100100)
,则可以使用
A = np.empty( (len(files), 100, 100) )
文件的内容是什么
以及您遇到的错误是什么?此外,如果您有多个文件,其中的内容要连接到一个大数组中,您可能会发现将每个加载的数组附加到一个列表中,然后将它们全部连接到一个大数组中会有更好的性能。在这样的循环中使用np.append
,速度很慢,而且很难获得正确的起始值np.empty(0)
不是列表的等价物[]
。请坚持使用列表附加方法,并在循环后将这些数组合并到一个数组中。