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)
不是列表的等价物
[]
。请坚持使用列表附加方法,并在循环后将这些数组合并到一个数组中。