首页 > 解决方案 > np.load() 在 for 循环中

问题描述

我有一组保存为 .npy 文件的数组,在这里我试图将它们全部读取,然后将它们添加到列表中以进行连接。问题是,当我尝试在 for 循环中执行此操作时,我得到“无法将大小为 0 的数组重塑为形状 (585,1386)”,但是当我一一加载它们时,它们读取得很好……什么给了?

'''

import numpy as np
import os

arr_list = []

for file in os.listdir('/Users/sjakober/Documents/ResearchSpring2020/geotiffs/'):
    if file.endswith(".npy"):
        arr = np.load(file)
        arr_list.append(arr)

'''

标签: pythonarraysnumpy

解决方案


当 .npy 文件损坏时会发生此错误,可能会被截断。文件头中定义的形状与文件中的实际数据量不匹配。这在这个问题的评论中有所说明。

在这个特定场景中的问题是,它os.listdir返回一个数组,其中包含给定路径内的所有文件名,而不是每个文件的完整路径。因此,当尝试从file变量加载数组时,它可能会尝试在当前文件夹中加载损坏的现有文件,但没有预期的文件。如果文件不存在,numpy 会抛出FileNotFoundError.

这可以通过使用os.path.join并加入文件名和完整路径来解决,或者使用glob

import glob
...
for file in glob.glob("/Users/sjakober/Documents/ResearchSpring2020/geotiffs/*.npy"):
...

推荐阅读