Вы пытались отладить запись / чтение строки только для одного массива? Посмотрите на шаги в деталях?
In [568]: arr = np.arange(3)
In [569]: arr
Out[569]: array([0, 1, 2])
In [570]: arr.tostring()
Out[570]: b'\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'
b
говорит нам, что это строка байтов (как старые строки py2). Затем вы 'оборачиваете' его в строку py3:
In [571]: str(arr.tostring())+'\n'
Out[571]: "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n"
Теперь попробуйте прочитать:
In [572]: _.strip('\n')
Out[572]: "b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00'"
In [573]: np.fromstring(_, np.int64)
/usr/local/bin/ipython3:1: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
#!/usr/bin/python3
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-573-fa8feb7879b7> in <module>
----> 1 np.fromstring(_, np.int64)
ValueError: string size must be a multiple of element size
Я могу восстановить исходный массив из вывода tostring
:
In [574]: np.frombuffer(arr.tostring(), np.int64)
Out[574]: array([0, 1, 2])
Все эти str
и символы новой строки для записи двоичной строки в файл портят чтение.