我已经阅读了各种教程,但不知怎的,我无法在我的任务中实现这些教程。
我的目标是从文本文件中提取数据。然后根据数据绘制一些直方图。然而,我是 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
最佳答案
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:]
关于python - 如何将多维数组分割成两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27293801/