将Matlab多维单元格数组转换为Javascript数组的最佳方法是什么?

时间:2015-08-31 23:18:00

标签: javascript arrays json matlab data-conversion

我有一个非常大的4D Matlab矩阵(31x31x86x127),我希望将其转换为Javascript 4D数组。做这个的最好方式是什么?

目前我的尝试方法是:

1)将Matlab矩阵写入二进制文件,然后将其读入并构建Javascript。

2)使用JSONlab(http://www.mathworks.com/matlabcentral/fileexchange/33381-jsonlab--a-toolbox-to-encode-decode-json-files-in-matlab-octave)将Matlab矩阵转换为JSON字符串,然后编写自定义解码器将该JSON字符串转换为Javascript数组。问题是JSON文本文件是1.98GB ...

3)这可能是最好的方法。

fileID = fopen('test.bin', 'w'); fwrite(fileID,value,'double');

Test.bin大约是82MB,这实际上是我的期望。 31 * 31 * 86 * 127 * 8bits / double = 82ish MB!但是,我如何(在浏览器中)将此二进制文件读取到4d Javascript数组?谢谢! 想法?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

save不是编写文本文件的正确函数。使用savejsonsaveubjson并将文件名传递给该函数。不要使用这些函数的return参数。这样做我得到一个小于100MB的ubjson和一个小于150MB的json。

我的原始答案,基于对使用过的代码的了解不足:

  

不使用自己的二进制格式,而是使用已有的二进制格式之一。尝试将其写入通用二进制json,jsonlab确实支持它。您应该以合理大小的数据结束,而不会失去标准化文件交换格式的优势。

答案 1 :(得分:0)

我认为最好的方法是

  1. 将矩阵写为字符串或文本文件(不需要二进制文件)。您需要n-1个分隔符,其中n=4是您的案例的维度数。请参阅此Saturn Fiddle作为2D矩阵的示例。代码
  2. 将文本文件读入JavaScript字符串。如何执行此操作取决于您是否在服务器或Web浏览器上使用JavaScript。
  3. 将字符串解析为JavaScript数组。您必须在(1)的分隔符上使用split函数,然后将它们输入到像example这样的数组中。
  4. 代码部分(1):

    % Welcome to SaturnAPI!
    % Start collaborating with MATLAB-Octave fiddles and accomplish more.
    % Start your script below these comments.
    A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
    for ii=1:size(A)(1)
        for jj=1:size(A)(2)
            printf(" %d ", A(ii,jj));
      end
      printf(";");
    end
    

    代码部分(3):

    function make(dim, lvl, arr) {
      if (lvl === 1) return [];
      if (!lvl) lvl = dim;
      if (!arr) arr = [];
      for (var i = 0, l = dim; i < l; i += 1) {
        arr[i] = make(dim, lvl - 1, arr[i]);
      }
      return arr;
    }
    
    var myMultiArray = make(4);