MATLAB:矩阵的快速散列

MATLAB:矩阵的快速散列,matlab,matrix,hash,Matlab,Matrix,Hash,我使用DataHash()计算一个包含1500行和700000列的矩阵的sha1哈希 此操作大约需要16秒,如果结果被缓存,则会产生相当大的算法量。我使用散列来保存长时间运行的操作的结果,该操作将矩阵作为输入 有人知道如何计算更快的散列吗?也可以通过一些快速操作来简化矩阵。对向量进行散列运算会更快,但由于矩阵相当大,我不确定如何实现一个较小的替换作为散列输入。我认为使用底层Java框架,您可以通过良好的性能改进实现相同的结果: % Your 1500-by-700000 matrix... A

我使用DataHash()计算一个包含1500行和700000列的矩阵的sha1哈希

此操作大约需要16秒,如果结果被缓存,则会产生相当大的算法量。我使用散列来保存长时间运行的操作的结果,该操作将矩阵作为输入


有人知道如何计算更快的散列吗?也可以通过一些快速操作来简化矩阵。对向量进行散列运算会更快,但由于矩阵相当大,我不确定如何实现一个较小的替换作为散列输入。

我认为使用底层Java框架,您可以通过良好的性能改进实现相同的结果:

% Your 1500-by-700000 matrix...
A = [ ... ]; 

% Convert A into a byte array called B...
B = typecast(A(:),'uint8');
% Or, as suggested, using the undocumented function getByteStreamFromArray:
% B = getByteStreamFromArray(A);

% Create an instance of a Java MessageDigest with the desired algorithm:
md = java.security.MessageDigest.getInstance('SHA-1');
md.update(B);

% Properly format the computed hash as an hexadecimal string:
hash = reshape(dec2hex(typecast(md.digest(),'uint8'))',1,[]);

更一般地说,您可以使用
B=getByteStreamFromArray(A)
而不是
typecast
。这是一个未记录的函数,由
save
调用,用于将任何变量(而不仅仅是可以调用
typecast
on的数组)转换为字节流进行序列化。适用于
A
大小小于2GB的任何情况。