【问题标题】:Is it possible to convert a numpy array to a csv file and then load it back as a numpy array?是否可以将 numpy 数组转换为 csv 文件,然后将其作为 numpy 数组加载回来?
【发布时间】:2019-11-05 04:54:22
【问题描述】:

我有一个图像数据集。我已经成功地遍历了我的目录和子目录以将图像存储到 numpy 数组中。

我使用了以下语句:

Image_array = np.array(Image_array)

我的数组大小是:100x224x224

这可以正常工作,并且图像可以正确存储。但是,我现在正尝试将这个 numpy 数组保存到 CSV 文件中。我已经展平了 numpy 数组并将其保存在 array.csv 文件中,如下所示:

array = array.flatten('F')
np.savetxt('array.csv', array, delimiter=',', fmt='%d')

上面的代码只创建了 1 个 CSV 文件,其中一列包含像素值。

然后我尝试将 CSV 数据读回 numpy 数组,但加载时数据严重混乱,因为图像只是模糊了。该数组还显示为“。”在它之前没有做的每个数字之后。

filename = "array.csv"
data = np.loadtxt(filename, delimiter=',')
new= np.array((data).reshape(100,224,224),order='F')

我错过了什么吗?请帮忙?

【问题讨论】:

  • np.save/load 将轻松保存和重新加载数组,但文件不是文本。要使用csv,您必须将数组设为 2d,并在加载后应用重塑。 arr.reshape(100,224*224) 是一个可能的重塑。或者,如果您想要的行数多于列数 (100*224, 224).

标签: python numpy csv reshape


【解决方案1】:

然后我尝试将 csv 数据读回 numpy 数组,但数据严重混乱

不要使用order 参数或始终使用它。您首先使用 F 将其展平,但在重新整形时未指定 order 参数,默认为 C。我认为您尝试这样做,但 order 参数放置在错误的函数中,它应该在 reshape 内。

数组也显示为“.”在它之前没有做的每个数字之后。

使用与之前的矩阵相同的dtype 读取数据,例如data = np.loadtxt(filename, delimiter=',', dype=int)。由于您没有提供dtype,因此我认为它已转换为float

【讨论】:

    【解决方案2】:

    Np.flatten() 创建一个一维数组(给出一个 csv 而不是 100 个)。尝试先拆分图像并遍历它们,如下所示:

    import numpy as np
    x = np.random.rand(100, 244, 244)
    images = [x[i,:,:] for i in range(100)]
    

    然后您的图像会像图像 [1]、图像 [36] 等出现,因此您可以像这样保存它们

        def makelist():
            set = []
            for i in range(100):
                set.append(f"array{i}.csv")
            return set
        files = makelist()
    
        for file in files:
            for image in images:
                np.savetxt(file, image)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2020-02-22
      • 2021-11-09
      • 2019-09-03
      • 2018-02-18
      • 2017-11-02
      • 2017-01-15
      相关资源
      最近更新 更多