Можно ли преобразовать массив NumPy в файл CSV, а затем загрузить его обратно как массив NUMPY? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть набор данных изображений. Я успешно перебрал свои каталоги и подкаталоги, чтобы сохранить изображения в массиве numpy.

Я использовал следующее утверждение:

Image_array = np.array(Image_array)

Мой размер массива: 100x224x224

Это прекрасно работает, и изображения сохраняются правильно. Однако сейчас я пытаюсь сохранить этот массив в файл CSV. Я сгладил массив numpy и сохранил его в файле array.csv, как показано ниже:

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

Приведенный выше код просто создает 1 файл CSV с одним столбцом со значениями пикселей.

Затем я попытался прочитать данные CSV обратно в массив, но эти данные сильно запутались при загрузке, так как изображение просто размыто. Массив также отображается с «.»после каждого номера, который он не делал ранее.

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

Я что-то упустил? пожалуйста, помогите?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Затем я попытался прочитать данные csv обратно в массив, но данные сильно испортились

Не используйте параметр order или используйте его последовательно. Сначала вы сглаживаете его с помощью F, но вы не указали параметр порядка при его изменении, который по умолчанию равен C. Я думаю, что вы пытались это сделать, но параметр order помещен в неправильную функцию, он должен быть внутри reshape.

Массив также отображается с '.'после каждого числа, которое он не делал ранее.

Считайте данные с тем же dtype, что и у вашей предыдущей матрицы, например data = np.loadtxt(filename, delimiter=',', dype=int). Поскольку вы не дали dtype, он конвертируется в float Я думаю.

0 голосов
/ 04 ноября 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...