2017-06-04 25 views
1

データのリストに対して関数(preprocessing.scale)を使用しようとしています。私はPythonでmapreduce/parallelismを初めて使用しています。パフォーマンスを向上させるために、これを多数のデータリストで処理したいと思います。sklearnのpreprocessing.scaleでPythonのマップ関数を使用するにはどうすればよいですか?

例:私はこのエラーを取得する

list(map(preprocessing.scale, X)) 

X = [1,2,3,4] 

構文を使用して

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

私はそれがために、関数の戻り値の型であると思いますが、私はこれを解決する方法がわかりません。どんな助けでも大歓迎です!

+0

Pythonの組み込みマップ関数は、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]) 

を、それがフロートDTYPEを期待し、私たちは簡単にFLに私たちのnumpyの配列を変換することができますその場でオート麦DTYPE:

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]を実行するのと同じです。

これを考えると、現在行っていることは、シングルトン(1つの観測)をスケーリングすることです。 1つのアイテムをスケールすることはできません。それは関数が分割される場所です。 preprocessing.scale(X[0])を実行しようとすると、同じエラーが発生します。

あなたはそれを実行して、単に配列X preprocessing.scale(X)を渡すのではなく、目的の目的は何ですか?

関連する問題