MATLAB: 矩阵快速哈希

5
我正在使用DataHash(https://de.mathworks.com/matlabcentral/fileexchange/31272-datahash)来计算一个包含1500行和700000列的矩阵的sha1哈希值。
这个操作大约需要16秒钟,如果结果被缓存,它将占据算法的相当大一部分。我使用哈希值来保存一个长时间运行的操作的结果,该操作以矩阵作为输入。
有没有人有更快地计算哈希值的想法?只要通过某些快速操作减少矩阵也可以。哈希化向量会更快,但由于矩阵相当庞大,我不确定如何实现一个好的较小替代品作为哈希输入。
1个回答

5

我认为使用底层的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,[]);

3
更普遍地,您可以使用B = getByteStreamFromArray(A)代替typecast。这是一个未记录的函数,由save调用以将任何变量(不仅仅是您可以在其上调用typecast 的数组)转换为字节流进行序列化。对于任何A大小小于2GB的情况都适用。 - Sam Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接