难洗型

2024-10-02 12:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试这样做:

ls = np.empty
ls =getColA()
rs = np.empty
rs=getColG()
x = dict(itertools.izip(ls,rs))

得到这个错误:

^{pr2}$

如果有人能帮我,我会很感激的。在


Tags: 错误nplsdictemptyitertoolsrs我会
3条回答

当您使用itertools.izip(ls,rs)时,第一列将包含numpy数组,这些数组不能作为字典键使用。

您必须将它们转换为类似tuple的散列iterable。另外,如果您想沿着第二个轴连接两个numpy数组,那么最好使用np.column_stack(),而不是{}。

而且,还不清楚getColA对象是什么以及它返回什么。也许你可以修改这个可调用的对象,以获得更合适的结果。

有几件事是不合理的

ls = np.empty
ls =getColA()

np.empty是一个函数。将其赋给ls;然后将getColA()的结果赋给ls。这就抹去了第一个任务。您认为第一个赋值是否将ls变量定义为数组?Python不是这样工作的。变量没有类型。

^{pr2}$

您没有告诉我们getColA()返回什么,但错误表明它是一个数组。1d?二维?

这种字典构建可以使用1d数组(我使用的是PY3)

In [497]: dict(itertools.zip_longest(np.arange(3),np.arange(10,13)))
Out[497]: {0: 10, 1: 11, 2: 12}

但不是2d

In [498]: dict(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3))))
...
TypeError: unhashable type: 'numpy.ndarray'

这是因为2d上的zip返回数组的行,而这些行本身就是数组:

In [499]: list(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3))
     ...: ))
Out[499]: 
[(array([0, 1, 2]), array([ 1.,  1.,  1.])),
 (array([3, 4, 5]), array([ 1.,  1.,  1.]))]

为什么要使用数组作为字典键?

dict必须将密钥设置为散列类型。

您正在尝试使用非哈希类型创建类型(努比·恩达雷).

这就是为什么你得到这个错误。

在您的情况下,您可以:

x = dict(itertools.izip(tuple(ls),rs))

相关问题 更多 >

    热门问题