将numpy数组转换为Android / Java可读格式?

时间:2018-01-30 13:03:03

标签: java android python numpy

我有一个numpy矩阵,其尺寸为7000 * 2048,类型为int16,我的磁盘需要大约40MB,我想在我的android应用程序中读取此矩阵,我尝试将其转换为CSV文件,但文件大小变得超过500MB,在我的Android应用程序中包装太多了。

我也尝试将其转换为JSON,但文件大小再次超过100MB,是否有一些合适的数据格式我可以将我的numpy(int16)数组转换为,占用更少的空间并且在Android / Java中可读。

1 个答案:

答案 0 :(得分:1)

对于一个简单的数组,可以用二进制格式保存numpy数据,我首先使用python中的data = data.astype(">i2")将数据更改为2byte Signed Integer。由于我没有保存关于字节序的任何信息,我将我的numpy数组转换为big endian。然后我可以使用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++;

   }