Numpy之文件存取


上一篇中我們簡要帶過了Numpy的數據持久化,在這一篇中將要具體說明Numpy提供的文件存取功能。Numpy可以將數組保存至二進制文件、文本文件,同時支持將多個數組保存至一個文件中。

1. np.tofile() & np.fromfile()

import numpy as np
import os

os.chdir("d:\\")
a = np.arange(0,12)
a.reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

a.tofile("a.bin")                                    #保存至a.bin

b = np.fromfile("a.bin", dtype=np.int32)  #從文件中加載數組,錯誤的dtype會導致錯誤的結果
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

b.reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
#讀取的數據將為一維數組,需要使用reshape改變其數組結構

2. np.save() & np.load() & np.savez()

load()和save()用Numpy專用的二進制格式保存數據,它們會自動處理元素類型和形狀等信息。savez()提供了將多個數組存儲至一個文件的能力,調用load()方法返回的對象,可以使用數組名對各個數組進行讀取。默認數組名arr_0,arr_1,arr_2......

np.save("a.npy", a.reshape(3,4))
c = np.load("a.npy")
c
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])


多個數組存儲至一個文件:

a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0,1.0,0.1)
c = np.sin(b)
np.savez("result.npz", a, b, sin_arr=c)  #使用sin_arr命名數組c
r = np.load("result.npz") #加載一次即可
r["arr_0"]
array([[1, 2, 3],
       [4, 5, 6]])
r["arr_1"]
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])
r["sin_arr"]
array([ 0.        ,  0.09983342,  0.19866933,  0.29552021,  0.38941834,
        0.47942554,  0.56464247,  0.64421769,  0.71735609,  0.78332691])

 可以使用解壓軟件解壓縮.npz文件會得到存儲的各個數組對應的.npy文件以便進行遍歷。

3. savetxt() & loadtxt()

a = np.arange(0,12,0.5).reshape(4,-1)
a
array([[  0. ,   0.5,   1. ,   1.5,   2. ,   2.5],
       [  3. ,   3.5,   4. ,   4.5,   5. ,   5.5],
       [  6. ,   6.5,   7. ,   7.5,   8. ,   8.5],
       [  9. ,   9.5,  10. ,  10.5,  11. ,  11.5]])
np.savetxt("a.txt", a)
np.loadtxt("a.txt")
array([[  0. ,   0.5,   1. ,   1.5,   2. ,   2.5],
       [  3. ,   3.5,   4. ,   4.5,   5. ,   5.5],
       [  6. ,   6.5,   7. ,   7.5,   8. ,   8.5],
       [  9. ,   9.5,  10. ,  10.5,  11. ,  11.5]])
np.savetxt("a.txt", a, fmt="%d", delimiter=",") #指定存儲數據類型為整型,分隔符為,
np.loadtxt("a.txt", delimiter=',') #以,分隔符讀取
array([[  0.,   0.,   1.,   1.,   2.,   2.],
       [  3.,   3.,   4.,   4.,   5.,   5.],
       [  6.,   6.,   7.,   7.,   8.,   8.],
       [  9.,   9.,  10.,  10.,  11.,  11.]])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM