使用csv.reader读取3D数组(图像)

作为在线课程的一部分,我必须创建一个函数,使用csv(不允许使用熊猫)读取大量图像数据,并以正确的格式输出图像及其标签,因为numpy数组是浮动的。

我将在这里尝试举一个简短的例子:

> raw_data = 0 0 0 0 0 0 0 0 0 0
>            L1,1,2,3,4,5,6,7,8,9
>            L2,4,5,6,7,8,9,1,2,3
>            .....................
>            L20 9,8,7,6,5,4,3,2,1
> 
>  output1 = [L1, L2 .... L20] 
>  output2 = [1.0,2.0,3.0         (for a single row)
>            4.0,5.0,6.0
>            7.0,8.0,9.0] 
>  output1.shape = 20 
>  output2.shape= 20, 3, 3

第一行应忽略(这是列名)。 每行包含10个值,代表给定图像的9个像素,再加上每行的第一列,即相应图像的标签。 读取图像和标签后,必须将它们转换为浮点值,然后将每个9像素行整形为3x3矩阵。

例如,如果原始数据集有20行(减去第一行),则函数的两个输出应具有(20、3、3)和(20)的形状-即20张3x3图像和20个数组标签。

我从来没有使用过csv阅读器,并且以前也没有使用过它,所以我很挣扎。 到目前为止,这就是我所拥有的(这是原始数据集的原始代码,比我给出的示例大得多)。

with open(filename) as file:
         file = csv.reader(file, delimiter = ',')   
         for row in file:
             images = row[1:785]
             labels = row[0]
         labels = np.array(labels).astype('float')
         images = np.array(images).astype('float')
         images = np.array(np.split(images, 28))  
         print('label:', labels.shape)
         print('image:', images.shape)
return images, labels

最后,我得到的形状是 (3,3)用于图像-因此仅读取了第一行; ()作为标签-因此为空。

当我尝试将数组转换放入for循环中时,它拒绝将str转换为float时,出现错误。

值错误:无法将字符串转换为浮点型
评论