小智 29
感谢John Montgomery,我认为我找到了一个解决方案,而且我认为它比将可能很大的数组中的每个数字转换为字符串的开销要少:
我可以创建数组的字节视图,并使用它们来更新哈希.不知何故,这似乎与使用数组直接更新提供相同的摘要:
>>> import hashlib
>>> import numpy
>>> a = numpy.random.rand(10, 100)
>>> b = a.view(numpy.uint8)
>>> print a.dtype, b.dtype # a and b have a different data type
float64 uint8
>>> hashlib.sha1(a).hexdigest() # byte view sha1
'794de7b1316b38d989a9040e6e26b9256ca3b5eb'
>>> hashlib.sha1(b).hexdigest() # array sha1
'794de7b1316b38d989a9040e6e26b9256ca3b5eb'
Run Code Online (Sandbox Code Playgroud)
数组中数据的格式是什么?难道你不能迭代数组,将它们转换成字符串(通过一些可重现的方式),然后通过更新将其输入到你的哈希中吗?
例如
import hashlib
m = hashlib.md5() # or sha1 etc
for value in array: # array contains the data
m.update(str(value))
Run Code Online (Sandbox Code Playgroud)
不要忘记 numpy 数组不会提供,__hash__()因为它们是可变的。因此,请小心不要在计算哈希值后修改数组(因为它将不再相同)。