为什么在字符串上md5哈希比在python中的numpy数组上快得多?

mls*_*ent 1 python hash md5 numpy

在python / numpy中,我有一个名为的10,000x10,000数组random_matrix。我使用MD5计算哈希值str(random_matrix)random_matrix本身。在字符串版本上花费0.00754404067993秒,在numpy数组版本上花费1.6968960762。当我将其放入20,000x20,000数组时,在字符串版本上花费0.0778470039368,在numpy数组版本上花费60.641119957秒。为什么是这样?numpy数组比字符串占用更多的内存吗?另外,如果我想用这些矩阵标识文件名,那么在计算散列值之前将其转换为字符串是一个好主意,还是有一些缺点?

Bre*_*arn 6

str(random_matrix) 由于numpy用“ ...”省略,因此不会包含所有矩阵:

>>> x = np.ones((1000, 1000))
>>> print str(x)
[[ 1.  1.  1. ...,  1.  1.  1.]
 [ 1.  1.  1. ...,  1.  1.  1.]
 [ 1.  1.  1. ...,  1.  1.  1.]
 ..., 
 [ 1.  1.  1. ...,  1.  1.  1.]
 [ 1.  1.  1. ...,  1.  1.  1.]
 [ 1.  1.  1. ...,  1.  1.  1.]]
Run Code Online (Sandbox Code Playgroud)

因此,当您对进行哈希处理时str(random_matrix),您并没有真正对所有数据进行哈希处理。

这先前的问题这个有关如何哈希numpy的阵列。