今天來學習numpy讀取文件和保存文件的兩個函數。
因為后面的機器學習我們需要從各種文件之中載入數據到numpy中,所以這兩個函數尤為重要,我對這兩個函數的每個參數都有詳細講解,但是還是希望大家親自試一下。要想學好機器學習,這兩個函數必須學會、
本次的eye1.txt文件由程序自動創建,eye2.txt文件需要我們自己創建。
eye2.txt內容如下:
11,12,13,14
21,22,23,24
31,32,33,34
41,42,43,44
實驗的全部代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : SundayCoder-俊勇
# @File : numpy5.py
import numpy as np
# numpy基本學習第五課
# 今天學習numpy中的一些基本函數
a=np.eye(3,4)
print a
# 輸出結果:
# [[ 1. 0. 0. 0.]
# [ 0. 1. 0. 0.]
# [ 0. 0. 1. 0.]]
# 1、將矩陣a保存到一個txt文件之中。
# numpy.savetxt(fname, X, fmt=’%.18e’,delimiter=’ ‘, newline=’\n’, header=’‘, footer=’‘, comments=’#‘)
# 作用:把一個矩陣保存到一個文件之中。
# 參數解釋:
# fname : 存儲的文件名和格式 例如:eye.txt
# X : 要存儲的矩陣
# header='header', header就是存儲文件第一行要添加的數據。
# footer='footer',footer就是存儲文件最后一行要添加的數據。
# comments參數的作用如下:
# 試一下:np.savetxt("eye1.txt",b,newline='\n',header='header', footer='footer', comments='@@@#')
# 文件eye1.txt的內容如下:
# @@@#header
# 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00
# @@@#footer
# 例子:
np.savetxt("eye1.txt",a)
# 注意這個函數是每次保存會把之前文件的內容刪掉。
# 例子,保存完a之后再保存b。則文件里面只有b
b=np.identity(4)
np.savetxt("eye1.txt",b)
# 文件內容只有b:
# 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00
# 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00
# 2、讀取文件函數
# numpy.loadtxt(fname, dtype=<type ‘float’>, comments=’#’, delimiter=None, converters=None,
# skiprows=0, usecols=None, unpack=False, ndmin=0)
# 作用是:Load data from a text file.
# Each row in the text file must have the same number of values.
# [文件的格式可以是csv和txt,實際上讀取這兩個文件使用的最多]。
# csv是一些數據庫文件的后綴名,在實際的機器學習中經常使用。
# 主要參數解釋如下:
# fname:讀取文件的文件名。例如eye2.txt。
# delimiter:數據之間的分隔符。如使用逗號","。
# dtype:數據類型。如float,str等。
# usecols:選取數據的列。
# unpack=True 意思是分拆存儲不同列的數據分開存儲。
# unpack : bool, optional
# If True, the returned array is transposed, so that arguments may be unpacked using
# x, y, z = loadtxt(...). When used with a structured data-type, arrays are
# returned for each field. Default is False.
# 也就是說選取幾列就必須有個變量與之對應,如下面選取第一列存儲在c,第二列存儲在v
# skiprows=1 跳過表頭那一行,再例如:skiprows=[0, 2]) # 跳過文件第一行和第三行
# 其中eye2.txt文件內容如下:
# 11,12,13,14
# 21,22,23,24
# 31,32,33,34
# 41,42,43,44
c,v=np.loadtxt('eye2.txt',delimiter=',',usecols=(0,1),dtype=int,unpack=True,skiprows=1)
print c
print v
# 輸出結果:
# [21 31 41]
# [22 32 42]
# 這里主要說一下usecols的用法。
# 如果選取eye2.txt中的前4列,則usecols=(0,1,2,3)。
# 如果取第5列這一列,則usecols=(4,)。
# 這種取單一列的情況容易出問題,請大家多注意。
# 整個語句如下:
# loadtxt("eye2.txt" , delimiter = "," , usecols=(0,1,2,3) , dtype=str)
# loadtxt("eye2.txt" , delimiter = "," , usecols=(4,) , dtype=str)
# 來試一下unpack=False的情況.
k=np.loadtxt('eye2.txt',delimiter=',',usecols=(0,1),dtype=int,unpack=False,skiprows=1)
print k
# 輸出結果為:
# [[21 22]
# [31 32]
# [41 42]]
所有的輸出結果如下:
[[ 1. 0. 0. 0.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 0.]]
[21 31 41]
[22 32 42]
[[21 22]
[31 32]
[41 42]]