我有一个维度为7000*2048,类型为int16的numpy矩阵,占据硬盘大约40MB的空间。我想在我的Android应用中读取这个矩阵。我尝试将其转换为CSV文件,但文件大小变成了超过500MB,这对于打包到我的Android应用中来说太大了。
我还尝试将其转换为JSON,但文件大小仍然超过了100MB。是否有一种适合的数据格式可以将我的numpy(int16)数组转换为,占用更少的空间,并且在Android/Java中可读?
对于一个简单的数组,可以以二进制格式保存numpy数据。我首先使用python将数据转换为2字节有符号整数data = data.astype(">i2")
。由于我没有保存任何关于字节序的信息,我将我的numpy数组转换为大端序。然后,我可以使用numpy.ndarray.tofile()
函数保存numpy值。
然后,我在Java中读取这个二进制数据:
String file = "/home/sam/PycharmProjects/train.bin";
FileInputStream fis = new FileInputStream(file);
DataInputStream ds = new DataInputStream(fis);
int count = ds.available();
short features[][] = new short[count / (2 * 2048)][2048]; //i know the size of my data.
int idx = 0;
while (ds.available() > 0) {
// read two bytes from data input, return short
short k = ds.readShort();
int row = idx / 2048;
int column = idx % 2048;
features[row][column] = k;
idx++;
}
FileInputStream
? - Andrii Omelchenko