简单的NumPy数组引用

时间:2016-05-16 03:31:23

标签: python numpy

我在了解如何引用Xy进行培训时遇到问题。

我有一个包含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的数组索引Xy的数字4,如上所述。但是,这些值不正确。换句话说,数组返回的值与数据中的值不匹配 - 它们被一列(索引)关闭。

2 个答案:

答案 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更容易使用(虽然不会令人困惑)。