美文网首页
numpy中文件的存储和读取-嵩天老师笔记

numpy中文件的存储和读取-嵩天老师笔记

作者: Wang华子 | 来源:发表于2018-04-20 17:35 被阅读321次

    numpy中csv文件的存储和读取

    CSV文件:(Comma‐Separated Value, 逗号分隔值)

    一维和二维数组

    存储

    np.savetxt(frame,array,fmt='%.18e',delimiter=None,newline='\n', header='', footer='', comments='# ', encoding=None)

    • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件 。
    • array : 存入文件的数组 (一维或者二维)。
    • fmt:写入文件的格式,例如: %d %.2f %.18e 。
    • delimiter : 分割字符串,默认是任何空格 。

    其他参数看文档

    import numpy as np
    
    a = np.arange(100).reshape((5,20))
    
    np.savetxt('a.csv',a,fmt = '%d',delimiter=',')
    
    b = np.loadtxt('a.csv',delimiter=',')
    
    b
    
    array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
            13., 14., 15., 16., 17., 18., 19.],
           [20., 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,
            33., 34., 35., 36., 37., 38., 39.],
           [40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 50., 51., 52.,
            53., 54., 55., 56., 57., 58., 59.],
           [60., 61., 62., 63., 64., 65., 66., 67., 68., 69., 70., 71., 72.,
            73., 74., 75., 76., 77., 78., 79.],
           [80., 81., 82., 83., 84., 85., 86., 87., 88., 89., 90., 91., 92.,
            93., 94., 95., 96., 97., 98., 99.]])
    

    读取

    np.loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')

    • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件。
    • dtype : 数据类型,可选 。
    • delimiter : 分割字符串,默认是任何空格 。
    • usecols:选取数据的列。
    • unpack : 如果True,读入属性将分别写入不同变量 。

    其他看文档

    注意:usecols,如果选取前三列,应该是usecols=(0,1,2),如果只选取第三列,应该是usecols=(2,)。但是,我尝试了一下,不输入逗号也可以,usecols=(2)

    b = np.loadtxt('a.csv',dtype = np.int,delimiter=',',usecols=(0,1,2))
    
    b
    array([[ 0,  1,  2],
           [20, 21, 22],
           [40, 41, 42],
           [60, 61, 62],
           [80, 81, 82]])
    
    b = np.loadtxt('a.csv',dtype = np.int,delimiter=',',usecols=(2,))
    
    b
    array([ 2, 22, 42, 62, 82])
    
    b = np.loadtxt('a.csv',dtype = np.int,delimiter=',',usecols=(2))
    
    b
    array([ 2, 22, 42, 62, 82])
    

    需要注意的是CSV文件只能有效存储一维和二维数组 。

    np.savetxt() np.loadtxt()只能有效存取一维和二维数组。

    多维数组(任意维度)

    存储

    a.tofile(frame, sep='', format='%s')

    • frame : 文件、字符串
    • sep : 数据分割字符串,如果是空串,写入文件为二进制。即,默认为空串。
    • format : 写入数据的格式
    import numpy as np
    
    a = np.arange(100).reshape((5,10,2))
    
    a
    Out[3]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7],
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15],
            [16, 17],
            [18, 19]],
    
           [[20, 21],
            [22, 23],
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31],
            [32, 33],
            [34, 35],
            [36, 37],
            [38, 39]],
    
           [[40, 41],
            [42, 43],
            [44, 45],
            [46, 47],
            [48, 49],
            [50, 51],
            [52, 53],
            [54, 55],
            [56, 57],
            [58, 59]],
    
           [[60, 61],
            [62, 63],
            [64, 65],
            [66, 67],
            [68, 69],
            [70, 71],
            [72, 73],
            [74, 75],
            [76, 77],
            [78, 79]],
    
           [[80, 81],
            [82, 83],
            [84, 85],
            [86, 87],
            [88, 89],
            [90, 91],
            [92, 93],
            [94, 95],
            [96, 97],
            [98, 99]]])
    a.tofile('b.dat',sep=',',format='%d')
    

    读取

    np.fromfile(frame, dtype=float, count=‐1, sep='')

    • frame : 文件、字符串
    • dtype : 读取的数据类型 。可以发现,我们读取数据的时候都需要指定数据类型,无论是不是一维二维。默认为浮点型
    • count : 读入元素个数, ‐1表示读入整个文件
    • sep : 数据分割字符串,如果是空串,写入文件为二进制
    c = np.fromfile('b.dat',dtype=np.int,sep=',')
    
    c
    Out[6]: 
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
           17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
           34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
           51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
           68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
           85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])
    

    可以发现,读取到的数据维度信息丢失了。因此,我们需要将维度信息告诉c。

    c = np.fromfile('b.dat',dtype=np.int,sep=',').reshape((5,10,2))
    
    c
    Out[14]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7],
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15],
            [16, 17],
            [18, 19]],
    
           [[20, 21],
            [22, 23],
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31],
            [32, 33],
            [34, 35],
            [36, 37],
            [38, 39]],
    
           [[40, 41],
            [42, 43],
            [44, 45],
            [46, 47],
            [48, 49],
            [50, 51],
            [52, 53],
            [54, 55],
            [56, 57],
            [58, 59]],
    
           [[60, 61],
            [62, 63],
            [64, 65],
            [66, 67],
            [68, 69],
            [70, 71],
            [72, 73],
            [74, 75],
            [76, 77],
            [78, 79]],
    
           [[80, 81],
            [82, 83],
            [84, 85],
            [86, 87],
            [88, 89],
            [90, 91],
            [92, 93],
            [94, 95],
            [96, 97],
            [98, 99]]])
    

    如果我们不指定分隔符,则读取也不需要指定,此时存储的是二进制文件。

    a = np.arange(100).reshape((5,10,2))
    
    a
    Out[18]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7],
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15],
            [16, 17],
            [18, 19]],
    
           [[20, 21],
            [22, 23],
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31],
            [32, 33],
            [34, 35],
            [36, 37],
            [38, 39]],
    
           [[40, 41],
            [42, 43],
            [44, 45],
            [46, 47],
            [48, 49],
            [50, 51],
            [52, 53],
            [54, 55],
            [56, 57],
            [58, 59]],
    
           [[60, 61],
            [62, 63],
            [64, 65],
            [66, 67],
            [68, 69],
            [70, 71],
            [72, 73],
            [74, 75],
            [76, 77],
            [78, 79]],
    
           [[80, 81],
            [82, 83],
            [84, 85],
            [86, 87],
            [88, 89],
            [90, 91],
            [92, 93],
            [94, 95],
            [96, 97],
            [98, 99]]])
    
    a.tofile('b.dat',format='%d')
    
    c = np.fromfile('b.dat',dtype=np.int).reshape((5,10,2))
    
    c
    Out[21]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7],
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15],
            [16, 17],
            [18, 19]],
    
           [[20, 21],
            [22, 23],
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31],
            [32, 33],
            [34, 35],
            [36, 37],
            [38, 39]],
    
           [[40, 41],
            [42, 43],
            [44, 45],
            [46, 47],
            [48, 49],
            [50, 51],
            [52, 53],
            [54, 55],
            [56, 57],
            [58, 59]],
    
           [[60, 61],
            [62, 63],
            [64, 65],
            [66, 67],
            [68, 69],
            [70, 71],
            [72, 73],
            [74, 75],
            [76, 77],
            [78, 79]],
    
           [[80, 81],
            [82, 83],
            [84, 85],
            [86, 87],
            [88, 89],
            [90, 91],
            [92, 93],
            [94, 95],
            [96, 97],
            [98, 99]]])
    

    需要注意

    • 该方法需要读取时知道存入文件时数组的维度和元素类型
    • a.tofile()和np.fromfile()需要配合使用
    • 可以通过元数据文件来存储额外信息

    Numpy文件的便捷存取

    np.save(fname, array) 或 np.savez(fname, array)

    • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
    • array : 数组变量

    np.load(fname)

    • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
    a = np.arange(100).reshape(5, 10, 2)
    
    np.save('a.npy',a)
    
    b = np.load('a.npy)
                b = np.load('a.npy')
    
    b
    Out[26]: 
    array([[[ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7],
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15],
            [16, 17],
            [18, 19]],
    
           [[20, 21],
            [22, 23],
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31],
            [32, 33],
            [34, 35],
            [36, 37],
            [38, 39]],
    
           [[40, 41],
            [42, 43],
            [44, 45],
            [46, 47],
            [48, 49],
            [50, 51],
            [52, 53],
            [54, 55],
            [56, 57],
            [58, 59]],
    
           [[60, 61],
            [62, 63],
            [64, 65],
            [66, 67],
            [68, 69],
            [70, 71],
            [72, 73],
            [74, 75],
            [76, 77],
            [78, 79]],
    
           [[80, 81],
            [82, 83],
            [84, 85],
            [86, 87],
            [88, 89],
            [90, 91],
            [92, 93],
            [94, 95],
            [96, 97],
            [98, 99]]])
    

    这里的存储,实际上也是二进制文件,如果只在python中进行操作,这种方法很方便,如果需要与其他程序进行交互,则需要视情况存储为CSV文件等。

    相关文章

      网友评论

          本文标题:numpy中文件的存储和读取-嵩天老师笔记

          本文链接:https://www.haomeiwen.com/subject/ysszkftx.html