Numpy 数组是可散列的吗?
Posted
技术标签:
【中文标题】Numpy 数组是可散列的吗?【英文标题】:Are Numpy arrays hashable? 【发布时间】:2019-01-13 00:46:10 【问题描述】:我读到 numpy 数组是可散列的,这意味着它是不可变的,但我可以更改它的值,那么可散列到底意味着什么?
c=pd.Series('a',index=range(6))
c
Out[276]:
0 a
1 a
2 a
3 a
4 a
5 a
dtype: object
这不会给我错误,那么为什么如果我尝试对 numpy 数组做同样的事情它会给出错误。
d=pd.Series(np.array(['a']),index=range(6))
【问题讨论】:
“我读过 numpy 数组是可散列的”你在哪里读到这个?c
用标量字符串值填充所有元素。 d
的错误是什么?这有重要的信息。
【参考方案1】:
与您所读的相反,数组不可散列。您可以使用
进行测试import numpy as np,collections
isinstance(np.array(1), collections.Hashable)
或
np.array(1):1
这与您遇到的错误无关:
d=pd.Series(np.array('a'),index=range(6))
ValueError: Wrong number of dimensions
错误是特定的,与哈希无关。数据框至少需要 1 维,而上面的则为 0 维。这是因为它正在获取一个数组 - 所以它检查维度(而不是直接传递字符串,Pandas 开发人员选择在其中实现如您所展示的那样。TBH 他们可以为 0 维数组选择相同的)。
所以你可以试试:
d=pd.Series(np.array(('a',)),index=range(6))
ValueError: Wrong number of items passed 1, placement implies 6
索引值期望在一维中有一个 6,所以它失败了。终于
pd.Series(np.array(['a']*6),index=range(6))
0 a
1 a
2 a
3 a
4 a
5 a
dtype: object
有效。所以DataFrame从数组发起是没有问题的,这和hashability无关。
【讨论】:
以上是关于Numpy 数组是可散列的吗?的主要内容,如果未能解决你的问题,请参考以下文章
Python数据结构与算法---统计可散列的对象Counter
Python数据结构与算法---统计可散列的对象Counter