2016-04-12 18 views
0

に動作しませんでした私は、ユニークな値のセットを取得する代わりに{}setを使用する必要があり、そう何Pythonはリテラルはnumpyのユニークな配列

import numpy as np 
# col_value_series is a series of strings 
# it doesn't run 
uniques = {np.unique(col_value_series)} 

# it works 
uniques = set(np.unique(col_value_series)) 

ようnumpyuniquepythonセットリテラルを使用しようとした設定しました違う?彼らは同じではありませんか?

+0

try '{[1,2,3]}' – hpaulj

答えて

3

いいえ、それらは同じではありません。

{np.unique(col_value_series)}(または、一般に{x})は、1つの要素のセットです。これが機能するためには、要素xはハッシュ可能でなければならない[glossary]でなければなりません。検討:

In [1]: import numpy as np 

In [2]: {np.array([1])} 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-2-f73a363763ae> in <module>() 
----> 1 {np.array([1])} 

TypeError: unhashable type: 'numpy.ndarray' 

set(np.unique(col_value_series))(又はset(x))反復可能xから採取された要素の集合です。これを有効にするには、引数xを反復可能にする必要があり、その要素はハッシュ可能でなければなりません。これらの条件が満たされているので動作します。

In [3]: set(np.array([1])) 
Out[3]: {1}