Массив NumPy, считанный из файла .bin, не имеет того же измерения, когда в этот файл был записан тот же массив - PullRequest
0 голосов
/ 08 октября 2019

Записали двумерный массив в файл .bin. Теперь я хочу прочитать этот массив и распечатать его обратно.

Вот как я сделал реализацию.

    import numpy as np
    mat = np.array([[18, 14, 20, 17],
                    [10, 16, 10, 12],
                    [15, 21, 13, 19]])

    with open(r"D:\PythonProgram\FileHandling\Array_bin.bin", 'wb') as filer:
        print(mat,"\n")
        filer.truncate()
        filer.write(mat)

    with open(r"D:\PythonProgram\FileHandling\Array_bin.bin", 'rb') as handler:
        handler.seek(0)
        print(handler.read())

    array_data = np.fromfile(r"D:\PythonProgram\FileHandling\Array_bin.bin",dtype = int)
    print("\n",array_data)

Output:
[[18 14 20 17]
[10 16 10 12]
[15 21 13 19]]

b'\x12\x00\x00\x00\x0e\x00\x00\x00\x14\x00\x00\x00\x11\x00\x00\x00\n\x00\x00\x00\x10\x00\x00\x00\n\x00\x00\x00\x0c\x00\x00\x00\x0f\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00\x13\x00\x00\x00'

[18 14 20 17 10 16 10 12 15 21 13 19]

Когда я использовал метод read *Метод 1008 *, я понял, почему вывод странный, поскольку данные хранятся в бинарном файле, но когда используется np.fromfile, я фактически получил элементы массива, но на этот раз мой массив сгладился.

Итак, есть ли способ вернуть массив в том же измерении, когда он был записан, но без использования метода np.reshape ?

1 Ответ

0 голосов
/ 08 октября 2019

В вашем случае это связано с тем, как файл записывается, а не с тем, как он читается.

Попробуйте:

mat = np.array([18, 14, 20, 17, 10, 16, 10, 12, 15, 21, 13, 19])

и затем прочитайте в файле байтбайт, и вы увидите, что это точно так же, как если бы вы использовали,

mat = np.array([[18, 14, 20, 17],
                [10, 16, 10, 12],
                [15, 21, 13, 19]])

Чтобы исправить это, я бы предложил добавить заголовок в ваш файл с соответствующей информацией или использовать другой метод для сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...