2016-05-16 6 views
1

トレーニングのためにXとyがどのように参照されているか理解している問題があります。単純なnumpyの配列参照

url = "http://www.xyz/shortDataFinal.data" 
# download the file 
raw_data = urllib.urlopen(url) 
# load the CSV file as a numpy matrix 
dataset = np.loadtxt(raw_data, delimiter=",") 
print(dataset.shape) 
# separate the data from the target attributes 

X = dataset[:,0:3] #Does this mean columns 1-4? 
y = dataset[:,4] #Is this the 5th column? 

私はイムが誤って私のX値を参照すると思う:私は次のようにImはnumpyの配列にロード5つの数値列を持つ単純なcsvファイルを持っています。ここに私が必要としているものがあります:

Xの値の参照の列1-4と私のyの値は、5番目の最後の列です。私が正しく理解している場合は、上記のように配列の0:3の値を参照し、yの値は4を参照する必要がありますが、これらの値は正しくありません。つまり、配列によって返される値はデータの値と一致しません。つまり、1つの列(インデックス)だけオフになります。

+1

あなたは '0:4'(4列を取得する)をします。 – hpaulj

答えて

0

はい、あなたの解釈は正しいです。 datasetはこの場合の行列なので、numpyインデックス演算子([])は従来の行、列形式を使用します。

X = dataset[:,0:3]は「0〜3列のすべての行」と解釈され、y = dataset[:,4]は「4列のすべての行」として解釈されます。 csvファイルのための代役として、複数行の文字列を使用して

0

In [332]: txt=b"""0, 1, 2, 4, 5 
    .....: 6, 7, 8, 9, 10 
    .....: """ 

In [333]: data=np.loadtxt(txt.splitlines(), delimiter=',') 

In [334]: data 
Out[334]: 
array([[ 0., 1., 2., 4., 5.], 
     [ 6., 7., 8., 9., 10.]]) 

In [335]: data.shape 
Out[335]: (2, 5) 

In [336]: data[:,0:4] 
Out[336]: 
array([[ 0., 1., 2., 4.], 
     [ 6., 7., 8., 9.]]) 

In [337]: data[:,4] 
Out[337]: array([ 5., 10.]) 

numpyインデックスは0から始まります。 [0:4]まで、0から始まる番号のリストとして(多かれ少なかれ)と同じであるが、4

In [339]: np.arange(0,4) 
Out[339]: array([0, 1, 2, 3]) 

を含むすべてが、最後の列を取得する別の方法は、-1を使用するのではありません索引付け

In [352]: data[:,:-1] 
Out[352]: 
array([[ 0., 1., 2., 4.], 
     [ 6., 7., 8., 9.]]) 

多くの場合、CSVファイルは数値と文字列の値の組み合わせです。 loadtxtdtypeパラメータには、構造化配列としてロードおよびアクセスする方法の簡単な説明があります。 genfromtxtはそれほど簡単ではありません(混乱はほとんどありません)。

関連する問題