为什么在Python中,字符串的MD5哈希比numpy数组快得多?

1 投票
1 回答
1141 浏览
提问于 2025-04-17 21:03

在python/numpy中,我有一个10,000x10,000的数组,叫做random_matrix。我用md5算法来计算str(random_matrix)的哈希值和random_matrix本身的哈希值。计算字符串版本的哈希值花了0.0075秒,而计算numpy数组版本的哈希值则花了1.6969秒。当我把数组变成20,000x20,000时,字符串版本的哈希计算需要0.0778秒,而numpy数组版本的哈希计算则需要60.6411秒。为什么会这样呢?numpy数组是不是占用了比字符串更多的内存?另外,如果我想用这些矩阵来命名文件,先把它转换成字符串再计算哈希值是个好主意吗?这样做有没有什么缺点呢?

1 个回答

7

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.]]

所以当你对 str(random_matrix) 进行哈希处理时,其实并没有对所有的数据进行哈希。

可以参考 这个问题这个问题,了解如何对numpy数组进行哈希处理。

撰写回答