numpy中文件的存儲(chǔ)和讀取-嵩天老師筆記

numpy中csv文件的存儲(chǔ)和讀取

CSV文件:(Comma‐Separated Value, 逗號(hào)分隔值)

一維和二維數(shù)組

存儲(chǔ)

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

  • frame : 文件、字符串或產(chǎn)生器济锄,可以是.gz或.bz2的壓縮文件 。
  • array : 存入文件的數(shù)組 (一維或者二維)蜒茄。
  • fmt:寫(xiě)入文件的格式奈梳,例如: %d %.2f %.18e 。
  • delimiter : 分割字符串,默認(rèn)是任何空格 循榆。

其他參數(shù)看文檔

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 : 文件墨坚、字符串或產(chǎn)生器秧饮,可以是.gz或.bz2的壓縮文件。
  • dtype : 數(shù)據(jù)類(lèi)型泽篮,可選 盗尸。
  • delimiter : 分割字符串,默認(rèn)是任何空格 帽撑。
  • usecols:選取數(shù)據(jù)的列振劳。
  • unpack : 如果True,讀入屬性將分別寫(xiě)入不同變量 油狂。

其他看文檔历恐。

注意:usecols寸癌,如果選取前三列,應(yīng)該是usecols=(0,1,2)弱贼,如果只選取第三列蒸苇,應(yīng)該是usecols=(2,)。但是吮旅,我嘗試了一下溪烤,不輸入逗號(hào)也可以,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文件只能有效存儲(chǔ)一維和二維數(shù)組 檬嘀。

np.savetxt() np.loadtxt()只能有效存取一維和二維數(shù)組。

多維數(shù)組(任意維度)

存儲(chǔ)

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

  • frame : 文件责嚷、字符串
  • sep : 數(shù)據(jù)分割字符串鸳兽,如果是空串,寫(xiě)入文件為二進(jìn)制罕拂。即揍异,默認(rèn)為空串。
  • format : 寫(xiě)入數(shù)據(jù)的格式
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 : 讀取的數(shù)據(jù)類(lèi)型 衷掷。可以發(fā)現(xiàn),我們讀取數(shù)據(jù)的時(shí)候都需要指定數(shù)據(jù)類(lèi)型柿菩,無(wú)論是不是一維二維戚嗅。默認(rèn)為浮點(diǎn)型
  • count : 讀入元素個(gè)數(shù), ‐1表示讀入整個(gè)文件
  • sep : 數(shù)據(jù)分割字符串枢舶,如果是空串渡处,寫(xiě)入文件為二進(jìn)制
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])

可以發(fā)現(xiàn),讀取到的數(shù)據(jù)維度信息丟失了祟辟。因此医瘫,我們需要將維度信息告訴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]]])

如果我們不指定分隔符旧困,則讀取也不需要指定醇份,此時(shí)存儲(chǔ)的是二進(jìn)制文件。

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]]])

需要注意

  • 該方法需要讀取時(shí)知道存入文件時(shí)數(shù)組的維度和元素類(lèi)型
  • a.tofile()和np.fromfile()需要配合使用
  • 可以通過(guò)元數(shù)據(jù)文件來(lái)存儲(chǔ)額外信息

Numpy文件的便捷存取

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

  • fname : 文件名吼具,以.npy為擴(kuò)展名僚纷,壓縮擴(kuò)展名為.npz
  • array : 數(shù)組變量

np.load(fname)

  • fname : 文件名,以.npy為擴(kuò)展名拗盒,壓縮擴(kuò)展名為.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]]])

這里的存儲(chǔ)怖竭,實(shí)際上也是二進(jìn)制文件,如果只在python中進(jìn)行操作陡蝇,這種方法很方便痊臭,如果需要與其他程序進(jìn)行交互哮肚,則需要視情況存儲(chǔ)為CSV文件等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末广匙,一起剝皮案震驚了整個(gè)濱河市允趟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸦致,老刑警劉巖潮剪,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異分唾,居然都是意外死亡抗碰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)绽乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弧蝇,“玉大人,你說(shuō)我怎么就攤上這事迄汛『慈溃” “怎么了骤视?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鞍爱,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我专酗,道長(zhǎng)睹逃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任祷肯,我火速辦了婚禮沉填,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佑笋。我一直安慰自己翼闹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蒋纬。 她就那樣靜靜地躺著猎荠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜀备。 梳的紋絲不亂的頭發(fā)上关摇,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音碾阁,去河邊找鬼输虱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脂凶,可吹牛的內(nèi)容都是我干的宪睹。 我是一名探鬼主播愁茁,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼横堡!你這毒婦竟也來(lái)了埋市?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤命贴,失蹤者是張志新(化名)和其女友劉穎道宅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胸蛛,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡污茵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葬项。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泞当。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖民珍,靈堂內(nèi)的尸體忽然破棺而出襟士,到底是詐尸還是另有隱情,我是刑警寧澤嚷量,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布陋桂,位于F島的核電站,受9級(jí)特大地震影響蝶溶,放射性物質(zhì)發(fā)生泄漏嗜历。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一抖所、第九天 我趴在偏房一處隱蔽的房頂上張望梨州。 院中可真熱鬧,春花似錦田轧、人聲如沸暴匠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)每窖。三九已至,卻和暖如春抹腿,著一層夾襖步出監(jiān)牢的瞬間岛请,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工警绩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崇败,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像后室,于是被迫代替她去往敵國(guó)和親缩膝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容