В вашем случае элемент представляет собой целое число от 0 до 255 включительно.Это означает, что для сохранения в формате ASCII потребуется не более
- 3 символа для числа
- 1 символа для
,
- 1 символа для пробела
, что дает не более 5 байт (в среднем несколько меньше) на элемент на диске.
Панд читает / интерпретирует это как массив int64
(см. full.dtype
) какпо умолчанию, что означает, что для каждого элемента требуется 8 байт, что приводит к увеличению размера npy-файла (большинство из которых - нули!).
Чтобы сохранить целое число от 0 до 255, нам нужен только один байттаким образом, размер npy-файла может быть уменьшен в 8 раз без потери какой-либо информации - просто скажите pandas, что ему нужно интерпретировать данные как 8-разрядные целые числа без знака:
full = pd.read_csv(r'e:\data.csv', dtype=np.uint8).values
# or to get rid of pandas-dependency:
# full = np.genfromtxt(r'e:\data.csv', delimiter=',', dtype=np.uint8, skip_header=1)
np.save(r'e:/RGB.npy', full, allow_pickle=False, fix_imports=False)
# an 8 times smaller npy-file
Большинство изформат времени npy требует меньше места, однако могут быть ситуации, когда формат ASCII приводит к меньшим файлам.
Например, если данные состоят в основном из очень маленьких чисел с одной цифрой и нескольких очень больших чисел, что дляони действительно 8 байтов арнеобходимо:
- в ASCII-формате вы платите в среднем 2 байта за элемент (не нужно писать пробелы, только 1027 *, так как разделитель достаточно хорош).
- в формате numpy вы будете платить 8 байт за элемент.