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

2024-04-23 20:41:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个尺寸为7000*2048,类型为int16的numpy矩阵,它在我的磁盘上大约需要40MB,我想在我的android应用程序中读取这个矩阵,我尝试将它转换成CSV文件,但是文件大小超过了500MB,这对于我的android应用程序来说太大了。在

我也试着把它转换成JSON,但是文件大小还是超过了100MB,有没有合适的数据格式可以转换成numpy(int16)数组,这样占用的空间更少,而且在Android/Java中是可读的。在


Tags: 文件csvnumpyjson应用程序类型尺寸空间
1条回答
网友
1楼 · 发布于 2024-04-23 20:41:38

对于一个可以以二进制格式保存numpy数据的简单数组,我首先在python中使用data = data.astype(">i2")将数据更改为一个2byte有符号整数。由于我没有保存任何关于endianness的信息,所以我将把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++;

   }

相关问题 更多 >