python连续选取numpy数组中的多行或多列数据

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,新的一年,有新的征程!!!

你可能感兴趣的:(python)