import numpy as np
np.indices((m,n)) 生成m*n矩阵 数值为0-m,0-n
–官网
https://numpy.org/doc/stable/user/basics.io.genfromtxt.html
genfromtxt运行两个主循环。第一个循环以字符串序列转换文件的每一行。第二个循环将每个字符串转换为适当的数据类型。此机制比单循环慢,但具有更大的灵活性。
–行拆分为列 delimiter 可以指定分隔符 宽度 None(多空格视为一个) 不会删除各个条目的前导或尾随空格
data = u"1, 2, 3\n4, 5, 6"
np.genfromtxt(StringIO(data), delimiter=",")
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
data = ’ 1 2 3\n 4 5 67\n890123 4’
np.genfromtxt(StringIO(data),delimiter=3)
array([[ 1., 2., 3.],
[ 4., 5., 67.],
[890., 123., 4.]])
–存在 \n 与 无\n 对比
data = ’ 1 2 3 4 5 67 890 123 4’
np.genfromtxt(StringIO(data),delimiter=None)
array([ 1., 2., 3., 4., 5., 67., 890., 123., 4.])
np.genfromtxt(StringIO(data),delimiter=None)
array([[ 1., 2., 3.],
[ 4., 5., 67.],
[890., 123., 4.]])
– autostrip 去掉空格
data=‘1, abc, 2 \n 3 , xxx ,4’
np.genfromtxt(StringIO(data),delimiter=’,’,dtype=‘U5’)
array([[‘1’, ’ abc’, ’ 2’],
['3 ‘, ’ xxx ‘, ‘4’]], dtype=’<U5’)np.genfromtxt(StringIO(data),delimiter=’,’,dtype=‘U5’,autostrip=True)
array([[‘1’, ‘abc’, ‘2’],
[‘3’, ‘xxx’, ‘4’]], dtype=’<U5’)
– 定义注释字符
data =’’’#
… #skip
… 1,2
… 3,4
… 5,6
… 7,8 #skip
… 8,0’’’np.genfromtxt(StringIO(data),comments=’#’,delimiter=’,’)
array([[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.],
[8., 0.]])
–指定skip_header skip_footer 跳过前x行 和 后y行
data =’\n’.join(str(i) for i in range(10))
np.genfromtxt(StringIO(data),)
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])np.genfromtxt(StringIO(data),skip_header=3,skip_footer=5)
array([3., 4.])
– usecols控制显示的列 命名列和非命名列
data=‘1 2 3\n 4 5 6’
np.genfromtxt(StringIO(data),usecols=(0,-1))
array([[1., 3.],
[4., 6.]])np.genfromtxt(StringIO(data),usecols=(0,1,-1))
array([[1., 2., 3.],
[4., 5., 6.]])np.genfromtxt(StringIO(data),names=‘a,b,c’,usecols=(‘a’,‘c’))
array([(1., 3.), (4., 6.)], dtype=[(‘a’, ‘<f8’), (‘c’, ‘<f8’)])np.genfromtxt(StringIO(data),names=‘a,b,c’,usecols=(‘a , c’))
array([(1., 3.), (4., 6.)], dtype=[(‘a’, ‘<f8’), (‘c’, ‘<f8’)])
–设置列名称
data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=[(_,int) for _ in ‘abc’])
array([(1, 2, 3), (4, 5, 6)],
dtype=[(‘a’, ‘<i4’), (‘b’, ‘<i4’), (‘c’, ‘<i4’)])
data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,names=‘a,b,c’)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])
–data被读取后已为空 data.seek(0)即可
np.genfromtxt(data,names=‘a,b,c’)
main:1: UserWarning: genfromtxt: Empty input file: “<_io.StringIO object at 0x06FF0F30>”
array([], dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])
–指定跳过第一行 与 列名
data=StringIO(“so it goest\n#a b c\n1 2 3\n4 5 6”)
np.genfromtxt(data,skip_header=1,names=True)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘a’, ‘<f8’), (‘b’, ‘<f8’), (‘c’, ‘<f8’)])data=StringIO(“so it goest\n#a b c\n1 2 3\n4 5 6”)
np.genfromtxt(data,names=True)
array([(1., 2., 3.), (4., 5., 6.)],
dtype=[(‘so’, ‘<f8’), (‘it’, ‘<f8’), (‘goest’, ‘<f8’)])
–指定显示类型与列名称
data=StringIO(‘1 2 3\n 4 5 6’)
ndtype=[(‘a’,int),(‘b’,float),(‘c’,int)]
name=[‘A’,‘B’,‘C’]
name
[‘A’, ‘B’, ‘C’]np.genfromtxt(data,names=name,dtype=ndtype)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘A’, ‘<i4’), (‘B’, ‘<f8’), (‘C’, ‘<i4’)])
–不指定列名与指定不足时显示
data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=(int,float,int))
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘f0’, ‘<i4’), (‘f1’, ‘<f8’), (‘f2’, ‘<i4’)])data=StringIO(‘1 2 3\n 4 5 6’)
np.genfromtxt(data,dtype=(int,float,int),names=‘a’)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘a’, ‘<i4’), (‘f0’, ‘<f8’), (‘f1’, ‘<i4’)])
–defaultfmt指定显示列名格式
np.genfromtxt(data,dtype=(int,float,int),defaultfmt=‘var_%02i’)
array([(1, 2., 3), (4, 5., 6)],
dtype=[(‘var_00’, ‘<i4’), (‘var_01’, ‘<f8’), (‘var_02’, ‘<i4’)])
–filling_values missing_values
data=‘N/A,2,3\n4,???’
kwargs=dict(delimiter=’,’,dtype=int,names=‘a,b,c’,missing_values={0:‘N/A’,‘b’:"",2:’???’},filling_values={0:0,‘b’:0,2:-999})
np.genfromtxt(StringIO(data),**kwargs)
array([(0, 2, 3), (4, 0, -999)],
dtype=[(‘a’, ‘<i4’), (‘b’, ‘<i4’), (‘c’, ‘<i4’)])
– 使用列转换函数
data=‘1,2.3%,45\n6,78.9%,0’
np.genfromtxt(StringIO(data),delimiter=’,’)
array([[ 1., nan, 45.],
[ 6., nan, 0.]])convertfunc=lambda x:float(x.strip(b’%’))/100
np.genfromtxt(StringIO(data),converters={1:convertfunc},delimiter=’,’)
array([[1.00e+00, 2.30e-02, 4.50e+01],
[6.00e+00, 7.89e-01, 0.00e+00]])