【发布时间】:2020-09-25 13:45:32
【问题描述】:
我在 python 中创建了一个这样的字典:
dictionary = dict(zip(numpy.arange(5), numpy.arange(5)*10))
我使用字典如下:
y = np.vectorize(lambda x: dictionary[x])
现在我想添加一个特殊情况:如果输入x 是一个空数组,那么输出也是一个空数组。我试图在字典中添加一个空数组:
dictionary[np.array([], dtype='int64')] = np.array([], dtype='int64')
但我得到了一个错误:
*** TypeError: unhashable type: 'numpy.ndarray'
为什么它不起作用?这里应该如何处理空数组?
【问题讨论】:
-
你不能。 dict 键不能是可变对象。空列表/数组是可变对象。在执行
dict[x]时,x成为一个数组(无论是否为空)是没有意义的。x最多可以是一个空元组。 -
@f. C。请检查这个答案
https://stackoverflow.com/a/7027308/12420884 -
如果我尝试调用
y([]),除非设置了otypes,否则我会在大小为0 的输入上得到ValueError: cannot callvectorize`。它永远不会影响您的功能。如果你传入一个数字数组,你的函数也永远不会得到一个空数组。 -
此外,这看起来像是一个巨大的 XY 问题。我怀疑你需要解释你真正想要做什么。
np.vectorize几乎永远不是正确答案。 -
如果您的字典表示可以表示为函数的映射(如此处),则最好将函数转换为 numpy 管道而不是使用
np.vectorize。