我在了解如何引用X
和y
进行培训时遇到问题。
我有一个包含5个数字列的简单csv
文件,我将其加载到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
值。
这就是我需要的:
X
值引用列1-4,我的y
值是最后一列,即第5列。如果我理解正确,我应该引用0:3
的数组索引X
和y
的数字4,如上所述。但是,这些值不正确。换句话说,数组返回的值与数据中的值不匹配 - 它们被一列(索引)关闭。
答案 0 :(得分:0)
是的,您的解释是正确的。在这种情况下,dataset
是一个矩阵,因此numpy索引操作符([]
)使用传统的行,列格式。
X = dataset[:,0:3]
被解释为"列0到3和#34的所有行;并且y = dataset[:,4]
被解释为"第4列"。
答案 1 :(得分:0)
使用多行字符串作为csv文件的替代品:
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文件通常是数字和字符串值的混合。 loadtxt
dtype
参数简要说明了如何加载和访问结构化数组。 genfromtxt
更容易使用(虽然不会令人困惑)。