2019,新的一年,第一次写博客,纪念一下。个人所有博客既是笔记,也是知识分享,如有错误还请指教。Thanks♪(・ω・)ノ
问题:
最近学习keras使用numpy.loadtxt()导入数据集时,想只导入前面连续的300行。首先,考虑了使用读取文件的read()、readline()方法,但是最多只能够解决读取行的问题,不能够读取多列连续的值。
故,还是回到numpy。网上很多都是截取某几行或某几列的数据。
解决方法:
方法一:
使用numpy.load()读取为ndarray类型,再转为list类型,通过list[a:b]截取a到b行,再转为ndarray类型。
import numpy as np
a=np.loadtxt("csv.csv",dtype=int,delimiter=',')#加载数据为ndarray
b=list(a) #转为list
c=b[1:5] #提取1至5行
d=np.array(c) #转为ndarray
print(type(a),type(b),type(c),type(d),a,b,c,d,sep="\n——")
方法二:(偶然发现,体会到。。。人生苦短我用python了。。。)
使用ndarray[numpy.arange(a,b)],即可截取a到b行的数据。实际上,这只是将numpy截取的每行连在了一起。截取多列,只需要将该矩阵转置后截取即可,如:ndarray.T[numpy.range(a,b)]。需要注意行列转换的问题。
import numpy as np
a=np.loadtxt("csv.csv",dtype=int,delimiter=',')#加载数据为ndarray
b2=a[np.arange(1,5)] #提取多行
print('np',b2)
b3=a.T[np.arange(1,5)] #提取多列,先将矩阵a转置,再提取多行,即提取原矩阵多列
b4=b3.T #提取后再将b3转置为列,*重要*
print(b3,"\n---",b4)
#若要提取一个连续矩形区域的多行多列,可用先提取行为一个矩阵后,再提取列的方式
b5=a[np.arange(1,3),np.arange(1,3)]#注,提取的是(1,1)和(2,2)两个坐标点
print("b5",b5)
最后,祝自己,2019,新的一年,有新的征程!!!