簡體   English   中英

純python方式將numpy數組壓縮為文本或圖像文件?

[英]Pure python way to compress a numpy array to a text or image file?

我正在尋找一種在純python中將numpy數組導出到文本文件或壓縮圖像文件的方法。 我的數組是500x700,因此導出它會生成一個大小約為3mb的文件。 我需要至少在1mb以下。

我已經嘗試過tifffile包,但是壓縮模式僅為1到9,所以還不夠。

我的文件可以是“矩陣”格式,XYZ格式,tiff圖像或其他格式類型,這些格式在壓縮時不會丟失數據並且與GIS軟件兼容。

我還需要它使用純python並且沒有外部要求(例如調用子進程),如果可能的話,以避免在遠程計算機上運行時出現兼容性問題。

有任何想法嗎?

如果您需要GIS軟件,請使用GDAL或rasterio。 例如,使用GTiff驅動程序制作GeoTiff。

假設您有浮動貨幣,這里是GDAL:

import numpy as np
from osgeo import gdal
gdal.UseExceptions()
driver = gdal.GetDriverByName('GTiff')
ds = driver.Create('file.tif', 500, 700, 1, gdal.GDT_Float32, ['COMPRESS=LZW'])
ly = ds.GetRasterBand(1)
ly.WriteArray(np.arange(500 * 700).reshape(700, 500))
ly = ds = None  # save, close

或光柵:

import rasterio
with rasterio.open('file2.tif', 'w', 'GTiff', width=500, height=700, count=1, dtype='f', COMPRESS='LZW'):
    ds.write(np.arange(500 * 700, dtype='f').reshape(1, 700, 500))

這些文件小於1 MB。 如果使用Byte或Int16類型,則可以變小。

(注意:未添加投影或地理配准)

看看np.savez_compressed

numpy.savez_compressed(file,* args,** kwds)

將多個數組以.npz壓縮格式保存到單個文件中。

from tempfile import TemporaryFile
outfile = TemporaryFile()
x = np.arange(10)
y = np.sin(x)
np.savez_compressed(outfile, x, y)
outfile.seek(0) # Only needed here to simulate closing & reopening file
npzfile = np.load(outfile)
npzfile.files

npzfile['arr_0']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM