2016-08-22 6 views
2

いつも混乱していますnumpyの形の変更は負の形状のパラメータを扱います。ここではコードと出力の例がありますが、誰でも再形状[-1、1]ありがとう。numpy形の負の形状の値との混乱

関連ドキュメント、Python 2.7を使用しています。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

import numpy as np 
from sklearn.preprocessing import LabelEncoder 
from sklearn.preprocessing import OneHotEncoder 

S = np.array(['box','apple','car']) 
le = LabelEncoder() 
S = le.fit_transform(S) 
print(S) 
ohe = OneHotEncoder() 
one_hot = ohe.fit_transform(S.reshape(-1,1)).toarray() 
print(one_hot) 

[1 0 2] 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.]] 

答えて

5

-1一方から他方欠落長さを推測するために使用されます。たとえば、(3,4,5)(-1,10)の再整形は、が他の入力を意味する唯一の長さなので、(6,10)に再整形することと同じです。

+0

ありがとうございますJulien、あなたの例では、3次元配列3 * 4 * 5ですか?だから、もし我々が10の列を持つ必要があります再形成後、行は6である必要があります、それは正しい計算ですか?ありがとう。 –

+1

はい:入力配列には '3 * 4 * 5 = 60'要素があります。出力には 'n_rows * 10'要素がありますので、' n_rows = 10'を与える 'n_rows * 10 = 60'を解決する必要があります。 – Julien

+0

Julienさん、ありがとうございます。 –

3

reshapeからドキュメント:

つの形状寸法は-1することができます。この場合、配列の長さと残りの寸法から値は と推測されます。

(3)Sを(3,1)アレイに変換する一般的な作業に使用されます。私はこの特殊なケースではS[:, None]を使っても同じ効果があると思います。

+0

ありがとうAguy、あなたが '(3、)'と書いていると混乱していますが、 '、'はここで何を意味していますか? –

+1

タプルを設計するだけです。 '(3)'は '3'、'(3、) 'は単一の要素' 3'を持つタプルです。 (形状はタプルで、要素が1つしか入っていなくても) – Julien

+1

'(n、)' numpyオブジェクトをベクトルとして考えることができ、 '(n、1)'はちょうど1列の行列として考えることができます。 – Aguy

関連する問題