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

A. *_*Sam 5 python java android numpy

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

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

A. *_*Sam 3

对于一个可以以二进制格式保存 numpy 数据的简单数组,我首先data = data.astype(">i2")在 python 中使用将数据更改为 2 字节有符号整数。由于我没有保存任何有关字节序的信息,因此我将 numpy 数组转换为大字节序。然后我可以使用函数保存 numpy 值numpy.ndarray.tofile()

然后我使用 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++;

   }
Run Code Online (Sandbox Code Playgroud)