gpt4 book ai didi

python - 无法将元组用作字典键?

转载 作者:太空狗 更新时间:2023-10-30 00:26:59 24 4
gpt4 key购买 nike

代码有点复杂,抱歉。请关注 parallel_p 函数。虽然 sign 是一个元组,但 Python 会提示:

if sign in hashtable 并给出一个TypeError。为什么 signnumpy.ndarray 而不是元组?我将它创建为一个元组。

p_dist = dict()

def parallel_prog(hashtable):
def wrapper(func):
if parallel_programming:
@wraps(func)
def parallel_p(*args, **kwargs):
sign = tuple(args)
print type(sign)
if sign in hashtable:
r = hashtable[sign] # hit.
return r
r = func(*args, **kwargs)
hashtable[tuple(sign)] = r # register for future hits.
return r
return parallel_p
else:
return func
return wrapper


@parallel_prog(p_dist)
def euclidean(a, b, signature=None):

val = np.sqrt(np.add.reduce((a - b)**2))
return val

在测试模块中

class similartyTest(unittest.TestCase):

def setUp(self):
self.t = np.array([1,2,3,4])
self.t1 = np.array([0, 0, 0, 0])
self.t2 = np.array([4,3,2,1])
self.h1 = [1,0,0,1,1]
self.h2 = [1,1,1,1,1]

def test_euclidean(self):
self.failUnless(euclidean(self.t, self.t) == 0)
self.failUnless(euclidean(self.t, self.t1) == sqrt(30))

输出:

<type 'tuple'>`

TypeError: unhashable type: 'numpy.ndarray`

最佳答案

不是每个元组都是可散列的。包含不可散列项的元组不可散列:

>>> x = ([], [])
>>> hash(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

您的元组显然包含一个 NumPy 数组,它远非可散列的类型。

关于python - 无法将元组用作字典键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com