2017-06-04 167 views
1

我想在數據列表上使用一個函數(preprocessing.scale)。我對Python中的mapreduce/parallelism是新手 - 我想在大量的數據列表上處理它以提高性能。如何在sklearn的預處理.scale中使用Python的map函數?

例子:

X = [1,2,3,4] 

使用語法:

list(map(preprocessing.scale, X)) 

我得到這個錯誤:

TypeError: Singleton array array(1.0) cannot be considered a valid collection. 

我認爲這是因爲函數的返回類型,但我不知道如何解決這個問題。任何幫助將不勝感激!

+0

Python內置的map函數與map/reduce並行性無關。 –

回答

1

你不需要/想要使用地圖功能,因爲它在底層for loop

幾乎所有sklearn方法是量化的,他們接受列表相似的對象(表,numpy的陣列等),這會比map(...)方法

演示工作備受快得多:

In [121]: from sklearn.preprocessing import scale 

In [122]: X = [1,2,3,4] 

In [123]: scale(X) 
Out[123]: array([-1.34164079, -0.4472136 , 0.4472136 , 1.34164079]) 

相同的演示使用numpy的數組:

In [39]: x = np.array(X) 

In [40]: x 
Out[40]: array([1, 2, 3, 4]) 

In [41]: scale(x) 
DataConversionWarning: Data with input dtype int32 was converted to float64 by the scale function. 
    warnings.warn(msg, _DataConversionWarning) 
Out[41]: array([-1.34164079, -0.4472136 , 0.4472136 , 1.34164079]) 

,預計浮D型細胞,所以我們可以很容易地轉換我們的numpy的陣列到FL在飛行燕麥D型:

In [42]: scale(x.astype('float64')) 
Out[42]: array([-1.34164079, -0.4472136 , 0.4472136 , 1.34164079]) 
+0

如果您在代碼旁邊添加了解釋,這個答案會更好。這個答案對這個問題的反應並不是很清楚,因爲你根本就不談論地圖功能。 –

+0

@SamHartman,謝謝你的評論!我已經更新了我的答案 - 我希望它有點清楚... – MaxU

+0

@MaxU謝謝:) – Ivan

0

執行list(map(preprocessing.scale, X))等效於執行[preprocessing.scale(a) for a in X]

鑑於此,您目前正在做的是縮放單身人士(一個觀察)。您無法縮放單個項目,並且這是功能中斷的地方。試着做preprocessing.scale(X[0]),你會得到同樣的錯誤。

你試圖像這樣運行它的目的是什麼,而不僅僅是傳遞數組X preprocessing.scale(X)

相關問題