如何将多维数组切割成两个数组?

时间:2014-12-04 12:11:06

标签: python numpy

我已阅读各种教程,但我无法在我的任务中实现这些教程。

我的目标是从文本文件中提取数据。然后根据数据绘制一些直方图。但是,我是python的新手,我坚持切片数组的基础知识。 在文本文件中有一个原始数据集;每个项目都在它自己的行中,每行都有多个属性。这些属性用逗号分隔。

我正在尝试将数据集拆分为两个。将每行的第一个属性(栽培品种)分成一个数组,将每个项目的其余属性(给定栽培品种的属性)分成第二个数组。 原始数据为178 x 14格式。

我成功地使用以下代码提取了第一个数组:

readFile = open('wine.data', 'r')
cultivar = np.loadtxt(readFile, delimiter=',', usecols=[0], unpack=True)

但是当我尝试制作第二个数组时,我遇到了问题。

readFile = open('wine.data','r')
attributes = np.loadtxt(readFile, delimiter=',', usecols=[-13], unpack=True)

无论我尝试使用usecols-method,它都是错误的语法(如上面的代码所示)或者我会得到一个扭曲的数组,如下所示:

  

[[1.00000000e + 00 1.00000000e + 00 1.00000000e + 00 ...,3.00000000e + 00      3.00000000e + 00 3.00000000e + 00]   [1.42300000e + 01 1.32000000e + 01 1.31600000e + 01 ...,1.32700000e + 01      1.31700000e + 01 1.41300000e + 01]   [1.71000000e + 00 1.78000000e + 00 2.36000000e + 00 ...,4.28000000e + 00      2.59000000e + 00 4.10000000e + 00]   ...   [1.04000000e + 00 1.05000000e + 00 1.03000000e + 00 ...,5.90000000e-01      6.00000000e-01 6.10000000e-01]   [3.92000000e + 00 3.40000000e + 00 3.17000000e + 00 ...,1.56000000e + 00      1.62000000e + 00 1.60000000e + 00]   [1.06500000e + 03 1.05000000e + 03 1.18500000e + 03 ...,8.35000000e + 02      8.40000000e + 02 5.60000000e + 02]]

整个python代码在这里:

import numpy as np
import matplotlib.pyplot as plt
import urllib


readFile = open('wine.data', 'r')

first = np.loadtxt(readFile, delimiter=',', usecols=[0], unpack=True)
readFile = open('wine.data','r')
rest = np.loadtxt(readFile, delimiter=',', usecols=[-13], unpack=True)
readFile.close()

print rest

原始数据:http://pastebin.com/YqV1AZ3r

1 个答案:

答案 0 :(得分:1)

usecols需要是一系列列索引。所以要获得第1-13列,你可以做到

readFile = open('wine.data', 'r')
rest = np.loadtxt(readFile, delimiter=',', usecols=range(1,14), unpack=True)

此外,无需两次读取文件。您可以读取文件一次并拆分(使用numpy的索引),如此

readFile = open('wine.data', 'r')
data = np.loadtxt(readFile, delimiter=',', unpack=True)
first = data[:,0]
rest = data[:,1:]