1. 程式人生 > >numpy檔案存取

numpy檔案存取

NumPy提供了多種存取陣列內容的檔案操作函式。儲存陣列資料的檔案可以是二進位制格式或者文字格式。二進位制格式的檔案又分為NumPy專用的格式化二進位制型別和無格式型別。

使用陣列物件的tofile()方法可以方便地將陣列中的資料以二進位制格式寫進檔案。tofile()輸出的資料不儲存陣列形狀和元素型別等資訊。因此用fromfile()函式讀回資料時需要使用者指定元素型別,並對陣列的形狀進行適當的修改:

>>> a = np.arange(0,12)
>>> a.shape = 3,4
>>> a
array([[ 0,  1,  2,  3],
[ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> a.tofile("a.bin") >>> b = np.fromfile("a.bin", dtype=np.float) # 按照float型別讀入資料 >>> b # 讀入的資料是錯誤的 array([ 2.12199579e-314, 6.36598737e-314, 1.06099790e-313, 1.48539705e-313, 1.90979621e-313, 2.33419537e-313])
>>> a.dtype # 檢視a的dtype dtype('int32') >>> b = np.fromfile("a.bin", dtype=np.int32) # 按照int32型別讀入資料 >>> b # 資料是一維的 array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) >>> b.shape = 3, 4 # 按照a的shape修改b的shape >>> b # 這次終於正確了 array([[ 0, 1, 2, 3], [ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

從上面的例子可以看出,在讀入資料時需要正確設定dtype引數,並修改陣列的shape屬性才能得到和原始資料一致的結果。無論資料的排列順序是C語言格式還是Fortran語言格式,tofile()都統一使用C語言格式輸出。此外如果指定了sep引數,則fromfile()和tofile()將以文字格式對陣列進行輸入輸出。sep引數指定的是文字資料中數值的分隔符。

load()和save()用NumPy專用的二進位制格式儲存資料,它們會自動處理元素型別和形狀等資訊:

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

如果想將多個數組儲存到一個檔案中,可以使用savez()。savez()的第一個引數是檔名,其後的引數都是需要儲存的陣列,也可以使用關鍵字引數為陣列起名,非關鍵字引數傳遞的陣列會自動起名為arr_0、arr_1、...。savez()輸出的是一個副檔名為npz的壓縮檔案,其中每個檔案都是一個save()儲存的npy檔案,檔名和陣列名相同。load()自動識別npz檔案,並且返回一個類似於字典的物件,可以通過陣列名作為鍵獲取陣列的內容:

>>> 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_array = c)
>>> r = np.load("result.npz")
>>> r["arr_0"] # 陣列a
array([[1, 2, 3],
       [4, 5, 6]])
>>> r["arr_1"] # 陣列b
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])
>>> r["sin_array"] # 陣列c
array([ 0.        ,  0.09983342,  0.19866933,  0.29552021,  0.38941834,
        0.47942554,  0.56464247,  0.64421769,  0.71735609,  0.78332691])

用解壓軟體開啟“result.npz”檔案,會發現其中有三個檔案:“arr_0.npy”、“arr_1.npy”和“sin_array.npy”,其中分別儲存著陣列a、b、c的內容。

save()和savez()輸出的二進位制檔案有特殊的格式,較難用其它語言編寫的程式讀入。

savetxt()和loadtxt()可以讀寫儲存1維和2維陣列的文字檔案。例如可以用它們讀寫CSV格式的文字檔案:

>>> a = np.arange(0,12,0.5).reshape(4,-1)
>>> np.savetxt("a.txt", a) # 預設按照'%.18e'格式儲存數值,以空格分隔
>>> 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.]])

有的CSV檔案中除了儲存數值之外,還儲存一些說明文字,例如第一行和第一列通常為列名和行名。如果需要忽略CSV檔案的第一行和第一列,可以先將檔案讀為字串陣列,然後取出需要的部分再轉換為數值陣列。例如對於下面的CSV資料檔案:

姓名,年齡,體重,身高
張三,30,75,165
李四,45,60,170
王五,15,30,120

可以採用如下的程式讀入其中的數值部分:

>>> tmp = np.loadtxt("test.csv", dtype=np.str, delimiter=",")
>>> data = tmp[1:,1:].astype(np.float)
>>> data
array([[  30.,   75.,  165.],
       [  45.,   60.,  170.],
       [  15.,   30.,  120.]])

此外,使用結構陣列也能讀入這樣的檔案,並且可以使用不同的元素型別儲存每個列的值,下面先定義結構陣列的型別:

>>> persontype = np.dtype({
...     'names':['name', 'age', 'weight', 'height'],
...     'formats':['S32','i', 'f', 'f']})

由於檔案中的第一行不是資料,因此需要先開啟資料檔案,讀取完第一行之後,再把檔案物件傳遞給loadtxt():

>>> f = file("test.csv")
>>> f.readline()
>>> data = np.loadtxt(f, delimiter=",", dtype=persontype)
>>> print data
[('\xe5\xbc\xa0\xe4\xb8\x89', 30, 75.0, 165.0)
 ('\xe6\x9d\x8e\xe5\x9b\x9b', 45, 60.0, 170.0)
 ('\xe7\x8e\x8b\xe4\xba\x94', 15, 30.0, 120.0)]

實際上,前面介紹的所有讀寫檔案的函式都可以直接使用已經開啟的檔案物件,如果使用檔案物件,可以將多個數組儲存到一個npy檔案中:

>>> a = np.arange(8)
>>> b = np.add.accumulate(a)
>>> c 
            
           

相關推薦

numpy檔案存取

NumPy提供了多種存取陣列內容的檔案操作函式。儲存陣列資料的檔案可以是二進位制格式或者文字格式。二進位制格式的檔案又分為NumPy專用的格式化二進位制型別和無格式型別。 使用陣列物件的tofile()方法可以方便地將陣列中的資料以二進位制格式寫進檔案。tofile()

numpy檔案存取-npz,npy

轉處:http://blog.csdn.net/pipisorry/article/details/39088003 NumPy提供了多種檔案操作函式方便我們存取陣列內容。 檔案存取的格式:二進位制和文字。二進位制格式的檔案又分為NumPy專用的格式化二進位制型別和

tensorflow tfrecord檔案存取

  import tensorflow as tf import numpy as np import skimage from skimage import data, io, color path = "1.tfrecords" with tf.python_io.TFRecordW

Python中資料的CSV檔案存取

Python中資料的CSV檔案存取 csv(逗號分隔值檔案格式)用來儲存批量資料 一.資料儲存 np.savetxt(frame, array, fmt, delimiter=None) • frame : 檔案、字串或產生器,可以是.gz或.bz2的壓縮檔案

FTP和nginx搭建檔案存取

FTPUtil工具類       --檔案上傳(在多tomcat時,檔案不能存到tomcat裡,需要使用ftp和nginx搭建一個存檔案,讀取檔案的地方) 安裝FTP伺服器  執行並登陸  測試:在瀏覽器上輸入ftp:****** ******為ip 需要注意的是

Numpy資料存取

Numpy資料存取 numpy提供了便捷的內部檔案存取,將資料存為np專用的npy(二進位制格式)或npz(壓縮打包格式)格式 npy格式以二進位制儲存資料的,在二進位制檔案第一行以文字形式儲存了資料的元資訊(維度,資料型別),可以用二進位制工具檢視檢視內容 npz檔案以壓縮打包檔案儲存,可以用壓縮軟體

【NOSQL】非關係型資料庫MongoDB ( MongoDB檔案存取操作 )

由於MongoDB的文件結構為BJSON格式(BJSON全稱:Binary JSON),而BJSON格式本身就支援儲存二進位制格式的資料,因此可以把檔案的二進位制格式的資料直接儲存到MongoDB的文件結構中。但是由於一個BJSON的最大長度不能超過4M,所以限制了單個文件

2.python資料分析與展示------Numpy資料存取與函式

1.資料的csv檔案存取CSV (Comma‐Separated Value,逗號分隔值) ,CSV是一種常見的檔案格式,用來儲存批量資料csv檔案:                 np.savetxt(frame, array, fmt='%.18e', delimite

iOS簡單物件的檔案存取

路徑 :path 字串:str 1.NSString/NSMutableString 讀取 [NSString stringWithcontentsOfFile: path encoding: NSUTF8DtringEncoding error:

nginx upload模組+python 後端處理模仿fastdfs實現檔案存取

前提條件: 1.編譯安裝帶有nginx upload 模組的nginx,安裝指令碼如下。 2.配置nginx的conf檔案,一個server配置upload上傳,一個server配置download下載 3.使用django快速部署python後端服務,對

數據分析與展示——NumPy數據存取與函數

iter 概率 屬性 不改變 均值 txt mean 寫入文件 註意 NumPy庫入門 NumPy數據存取和函數 數據的CSV文件存取 CSV文件 CSV(Comma-Separated Value,逗號分隔值)是一種常見的文件格式,用來存儲批量數據。 np.savetx

clob-資料庫存取大文字檔案、二進位制圖片

 將檔案中所有資料(即大文字)作為資料庫表某一列值存入: 程式碼涉及到IO及SQL的相關包: import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import j

matplotlib資料視覺化分析(2)-- numpy將陣列儲存到檔案

1 陣列以二進位制的格式儲存 np.save 和 np.load 是讀寫磁碟資料的兩個主要函式。預設情況下,陣列以未壓縮的原始二進位制格式儲存在副檔名為 npy 的檔案中,以陣列 a 為例: # coding:utf-8 import numpy as np

numpy.matrixlib.defmatrix.matrix寫入csv檔案

程式碼如下: import pickle from numpy import * import numpy p=open('./svmDat27','r') my_matrix=pickle.load(p) # print type(di)#<class

利用python進行資料分析-----第二篇 Numpy 陣列 向量計算 索引 切片 轉置 軸對換 檔案輸入輸出

目錄 布林值索引 花式索引 其他函式 排序 線性代數 隨機數生成 Numpy簡介 NumPy是一種通用的陣列處理軟體包,旨在有效地操縱任意記錄的大型多維陣列,而不會為小

windows 環境下pip環境變數配置以及如何使用pip安裝庫檔案,sklearn,numpy

python 使用pip安裝所需要的庫檔案 什麼是pip pip 環境變數配置 多個python 版本下如何使用pip安裝庫檔案 什麼是pip pip 是通用的 Python 包管理工具。提供了對 Python 包的查詢、下載、安裝、解除安裝的

PB 存取檔案函式

FileClose() 功能關閉先前用FileOpen()函式開啟的檔案。 語法FileClose ( fileno ) 引數fileno:integer,指定要關閉檔案的檔案控制代碼,該控制代碼使用FileOpen()函式開啟檔案時得到返回值Integer。 函式執行成功時

RapidJson(V1.1.0)的Value簡單操作(拼接json串,存取檔案中的json,解析json串)

#include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <rapidjson/pointer.h> #include <rapidjson/writer.h

fatal error: numpy/arrayobject.h沒有那個檔案或目錄

編譯 pycaffe時報錯:fatal error: numpy/arrayobject.h沒有那個檔案或目錄 網上總是推薦下面操作,問題在於我編譯caffe_dssd成功了,現在準備在另一個資料夾下編譯caffe ssd sudo apt-get install python-nump

DELPHI存取JPG圖片檔案至SQL Server伺服器中

做一個小型的管理系統時,需要用到ADO控制元件存取SQL Server資料庫圖片,檢視資料發現基本都是針對BMP檔案進行操作(巨增資料庫大小),但發現了★eagletian★高手翻譯的ADO英文技術文件,裡面涉及到了資料庫存取JPEG檔案的關鍵技術,測試通過,執行良好,現於原