我有一个非常大的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数组?谢谢! 想法?
感谢您的帮助!
答案 0 :(得分:1)
save
不是编写文本文件的正确函数。使用savejson
或saveubjson
并将文件名传递给该函数。不要使用这些函数的return参数。这样做我得到一个小于100MB的ubjson和一个小于150MB的json。
我的原始答案,基于对使用过的代码的了解不足:
不使用自己的二进制格式,而是使用已有的二进制格式之一。尝试将其写入通用二进制json,jsonlab确实支持它。您应该以合理大小的数据结束,而不会失去标准化文件交换格式的优势。
答案 1 :(得分:0)
我认为最好的方法是
n-1
个分隔符,其中n=4
是您的案例的维度数。请参阅此Saturn Fiddle作为2D矩阵的示例。代码split
函数,然后将它们输入到像example这样的数组中。代码部分(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);