方法一:
import numpy as np
data_file = 'iris.txt'#你的数据集.txt文件
def get_dataset(data_file):
with open(data_file,'r') as in_file:
txt = in_file.readlines()#将数据集以字符串列表的形式放在txt里面['1.2 3 4\n','1 2
#3\n']
txt = [txt[i].split(' ') for x in range(len(txt))]#将字符串txt[i](['1.2 3 4\n','1
#2 3\n'])转化为[['1.2','2','3','\n'],['1','2','3','\n']]
txt = [txt[i].strip('[\n,\t]') for i in range(len(txt))]#去掉字符串不能转换为float的
#特殊字符--->[['1.2','2','3'],['1','2','3']]
for i in range(len(txt)): #数据集长度(样本个数)
for j in range(len(txt[0])):#样本特征数(因为每一个样本一般取同样数目特征数,所以可以用
#txt[0]代替任意长度)
txt[i][j] = float(txt[i][j])
return txt
方法二:
#法二:用map的方法转
def get_dataset(data_file):
with open(data_file,'r') as in_file:
txt = in_file.readlines()#read()返回字符串 readline()读一行,返回字符串 readlines()
# 全部读,返回字符串列表,含有\n
for i in range(len(txt)):
txt[i] = list(map(float, filter(None,re.split('[\t \n]', txt[i].strip()))))#这
#一行和后面注释的两行等价
print(txt)
#txt_list = re.split('[\t \n]', txt.strip())
#txt_out = list(map(float, txt_list)) # 高效的map ,# 这一步的list极其重要,否则得到的
#只是一个map对像
方法三:
#法三:用read()读取数据+map的方法转:
def get_dataset(data_file):
in_file = open(data_file, mode='r')
txt = in_file.read() #.split('\n').split('\t')
txt_list = re.split('[\t \n]', txt.strip())
txt_out = map(float, txt_list) # 高效的map
print(list(txt_out)) # 这一步的list极其重要,否则得到的只是一个map对像
????????方法三和方法一、二返回的数据类型不一样,方法一、二是把每个数据集的特征分别放在一个list里面,再用一个大的list装所有数据集,这样就成了一个二维的数组,而方法三就是用read()的方法,将所有的数据集的特征放在一个list里面,没有区分特征属于哪一类。
运行结果如下:
方法一结果:
?方法二结果:
方法三结果:
?
|