2016-02-09 326 views
1

當使用雨棚我可以做random.sample在Python 3(jupyter筆記本)

from scipy import * 
import pylab as py 
import random 

aa = random.sample(arange(1,4,0.5),1) 
在Jupyter筆記本它的投訴

而具有以下內容:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-59-e33979a68ee1> in <module>() 
----> 1 cc = random.sample(arange(1,4,0.5), 1) 

/u/rscratch/bm485/anaconda3/lib/python3.5/random.py in sample(self, population, k) 
309    population = tuple(population) 
310   if not isinstance(population, _Sequence): 
--> 311    raise TypeError("Population must be a sequence or set. For dicts, use list(d).") 
312   randbelow = self._randbelow 
313   n = len(population) 

TypeError: Population must be a sequence or set. For dicts, use list(d). 

我怎樣才能解決這個問題?

+0

請列出您所有的進口。另外,寧願'numpy導入numpy''numpy import''' - 後面的導入可能會影響其他導入。 – cel

+0

我編輯了這個問題,包括進口@cel – Mencia

+1

'np.random.choice(np.arange(1,4,0​​.5),1)'工作,'random.choice(np.arange(1,4, 0.5))'',從'scipy import *'暗示將'numpy.random'拉入你的名字空間。 – cel

回答

2

請儘可能避免使用明星進口。通常你並不清楚你到底輸入了什麼,並且影響到了什麼。

import random 
from scipy import * 
print(random) 

給出:

<module 'numpy.random' from '/Users/ch/miniconda/envs/sci34/lib/python3.4/site-packages/numpy/random/__init__.py'> 

鑑於

打印:

<module 'random' from '/Users/ch/miniconda/envs/sci34/lib/python3.4/random.py'> 

Takehome消息:

優先import scipy as sp或更好from scipy import <subpackage>以避免影響您的隨機功能。謝謝@ ev-br的評論。


如果你正在處理numpy的的ndarrays,喜歡在numpy.random在櫃檯零件在Python的random模塊的方法。你在這裏看到的問題是python和numpy對於一個序列有不同的定義。欲瞭解更多詳情,請參閱這裏的討論:https://github.com/numpy/numpy/issues/2776

你想要的是可能np.random.choice

numpy.random.choice(a, size=None, replace=True, p=None) 
+2

沒有理由將'scipy as sp'導入。做'從scipy導入子包或'從scipy.subpackage導入東西'。 –

+0

@ ev-br,的確如此。 – cel

+0

刪除 編輯:不好的建議,顯然是文檔陳述'導入scipy作爲sp'已被depricated和建議刪除,因爲子包不會自動加載scipy,這意味着'sp.integrate'會引發一個AttributeError。 –