NumPy系統是Python的一種開源的數值計算擴展。
這種工具可用來存儲和處理大型矩陣,
比Python自身的嵌套列表(nested list structure)結構要高效的多
(該結構也能夠用來表示矩陣(matrix))。python
矩陣和數的計算:
加法四則運算:
一個矩陣與一個數字進行四則運算就是把矩陣中的每個元素都與這個數字進行四則運算:dom
import numpy a=numpy.arange(12).reshape(3,4) print('a-------') print(a) print('a1-------') a1=a+1 print(a1) print('a2-------') a2=a-1 print(a2) print('a3-------') a3=a*2 print(a3) print('a4-------') a4=a/2 print(a4) print('-------')
這是一個numpy的廣播機制形成的,在運算過程當中,四則運算的值被廣播到全部的元素上面。ide
假設有下面這麼一個txt文件,要用numpy打開:工具
Year,WHO region,Country,Beverage Types,Display Value 1986,Western Pacific,Viet Nam,Wine,0 1986,Americas,Uruguay,Other,0.5 1985,Africa,Cte d'Ivoire,Wine,1.62 1986,Americas,Colombia,Beer,4.27 1987,Americas,Saint Kitts and Nevis,Beer,1.98 1987,Americas,Guatemala,Other,0 1987,Africa,Mauritius,Wine,0.13 1985,Africa,Angola,Spirits,0.39 1986,Americas,Antigua and Barbuda,Spirits,1.55 1984,Africa,Nigeria,Other,6.1 1987,Africa,Botswana,Wine,0.2 1989,Americas,Guatemala,Beer,0.62 1985,Western Pacific,Lao People's Democratic Republic,Beer,0 1984,Eastern Mediterranean,Afghanistan,Other,0 1985,Western Pacific,Viet Nam,Spirits,0.05 1987,Africa,Guinea-Bissau,Wine,0.07 1984,Americas,Costa Rica,Wine,0.06 1989,Africa,Seychelles,Beer,2.23 1984,Europe,Norway,Spirits,1.62 1984,Africa,Kenya,Beer,1.08 1986,South-East Asia,Myanmar,Wine,0 1989,Americas,Costa Rica,Spirits,4.51 1984,Europe,Romania,Spirits,2.67 1984,Europe,Turkey,Beer,0.44 1985,Africa,Comoros,Other, 1984,Eastern Mediterranean,Tunisia,Other,0 1985,Europe,United Kingdom of Great Britain and Northern Ireland,Wine,1.36 1984,Eastern Mediterranean,Bahrain,Beer,2.22 1987,Western Pacific,Viet Nam,Beer,0.11 1986,Europe,Italy,Other, 1986,Africa,Sierra Leone,Other,4.48 1986,Western Pacific,Micronesia (Federated States of),Wine,0 1989,Africa,Mauritius,Beer,1.6
……學習
import numpy world_alcohol=numpy.genfromtxt("world_alcohol.txt",delimiter=",",dtype=str) print(type(world_alcohol)) print(world_alcohol)
首先導入numpy庫,而後用numpy.genfromtxt以「,」爲分隔符將world_alcohol.txt文件導入;
而後用print(type(world_alcohol))打印world_alcohol的類型;
最後再將整個world_alcohol打印出來。
結果以下:
ui
若是不知道某個方法的做用,能夠打印help語句來獲取:spa
print(help(numpy.genfromtxt))
它會打印出幫助註釋:3d
利用numpy的array能夠建立矩陣:code
import numpy vector=numpy.array([5,10,15,20]) matrix=numpy.array([[5,10,15,20],[20,25,30],[35,40,45]]) print(vector) print(matrix)
經過.shape方法能夠打印矩陣的屬性:blog
import numpy vector=numpy.array([1,2,3,4]) print(vector.shape) matrix=numpy.array([[2,10,15],[20,25,30]]) print(matrix.shape)
第一行表示有四個元素,第二行表示這是一個2行3列的矩陣。經過.dtype方法能夠打印元素的類型:
import numpy numbers=numpy.array([1,2,3,4]) print(numbers) print(numbers.dtype)
若是想要從矩陣中提取相應的元素,能夠直接用索引,以打開的上述txt文件爲例:
import numpy world_alcohol=numpy.genfromtxt("world_alcohol.txt",delimiter=",",dtype=str,skip_header=1) print(world_alcohol) uruguay_other_1986=world_alcohol[1,4] third_country=world_alcohol[2,2] print(uruguay_other_1986) print(third_country)
numpy一樣也提供了切片的操做:
import numpy vector=numpy.array([5,10,15,20]) print(vector[0:3]) matrix=numpy.array([ [5,10,15], [20,25,30], [35,40,45] ]) print(matrix[:,1]) print(matrix[:,0:2]) print(matrix[1:3,0:2])
這裏要注意的是:切片操做的時候能夠用「:」代替一整行或者一整列以及從某行到某行和從某列到某列,還有,切片是不包含後面的參數內容的。
能夠利用矩陣元素的值是否與給定的值相等打印bool值:
import numpy vector=numpy.array([5,10,15,20]) print(vector==10) matrix=numpy.array([ [5,10,15], [20,25,30], [35,40,45] ]) print(matrix==25)
而後能夠將得到的bool值做爲索引帶回到矩陣中,同時判斷是否相等一樣支持邏輯運算:
import numpy vector=numpy.array([5,10,15,20]) equal_to_ten=(vector==10) print(equal_to_ten) print(vector[equal_to_ten]) matrix=numpy.array([ [5,10,15], [20,25,30], [35,40,45] ]) second_column_25=(matrix[:,1]==25) print(second_column_25) print(matrix[second_column_25,:]) matrix[second_column_25,1]=10 print(matrix) equal_to_ten_and_five=(vector==10)&(vector==5) print(equal_to_ten_and_five) equal_to_ten_or_five=(vector==10)|(vector==5) print(equal_to_ten_or_five)
能夠利用.astype方法改變矩陣元素的類型:
import numpy vector=numpy.array(["1","2","3"]) print(vector.dtype) print(vector) vector=vector.astype(float) print(vector.dtype) print(vector)
numpy也提供了求最值和求和的方法:
import numpy vector=numpy.array([5,10,15,20]) print(vector.min()) matrix=numpy.array([ [5,10,15], [20,25,30], [35,40,45] ]) print(matrix.sum(axis=1)) print(matrix.sum(axis=0))
sum中的參數:axis=1表示對行求和,axis=0表示對列求和
numpy也提供了一些很便利的方法:
np.arange(15)
生成從0到14共15個數字:
a=np.arange(15).reshape(3,5)
將向量轉換爲矩陣的操做:
分別打印矩陣的屬性、維度、元素類型名、元素數量:
print(a.shape) print(a.ndim) print(a.dtype.name) print(a.size)
print(np.zeros((3,4))) print(np.ones((2,3,4),dtype=np.int32))
建立一個元素全爲0,2行3列的矩陣和元素全爲1,3維3行4列的矩陣:
print(np.arange(10,30,5)) print(np.arange(0,2,0.3))
指定起點、終點和步長,打印向量:
print(np.random.random((2,3)))
生成一個2行3列的隨機數矩陣:
import numpy as np print(np.arange(15)) a=np.arange(15).reshape(3,5) print(a) print(a.shape) print(a.ndim) print(a.dtype.name) print(a.size) print(np.zeros((3,4))) print(np.ones((2,3,4),dtype=np.int32)) print(np.arange(10,30,5)) print(np.arange(0,2,0.3)) print(np.arange(12).reshape(4,3)) print(np.random.random((2,3)))
numpy中也提供了一些常量:
import numpy as np from numpy import pi print(np.linspace(0,2*pi,100))
生成從0到2π的100個數:
import numpy as np B=np.arange(3) print(B) print(np.exp(B)) print(np.sqrt(B))
開方運算和e的次方運算:
a=np.array([20,30,40,50]) b=np.arange(4) print(a) print(b) c=a-b print(c) c=c-1 print(c) b**2 print(b**2) print(a<35)
進行矩陣之間的四則運算和乘方運算、邏輯運算:
A=np.array([ [1,1], [0,1] ]) B=np.array([ [2,0], [3,4] ]) print(A) print('--------') print(B) print('--------') print(A*B) print('--------') print(A.dot(B)) print('--------') print(np.dot(A,B))
還有矩陣運算:
a=np.floor(10*np.random.random((3,4))) print(a) print('-------') print(a.ravel())
將矩陣轉換爲向量:
print('-------') a.shape=(6,2) print(a) print('-------') print(a.T) print(a.reshape(3,-1))
而後再轉換成另外一種屬性的矩陣,還能夠轉置和自定義行列:
import numpy as np a=np.floor(10*np.random.random((2,2))) b=np.floor(10*np.random.random((2,2))) print(a) print(b) print(np.hstack((a,b))) print(np.vstack((a,b)))
矩陣的橫豎拼接:
import numpy as np a=np.floor(10*np.random.random((2,12))) print(a) print(np.hsplit(a,3)) print(np.hsplit(a,(3,4)))
矩陣的橫向平均拆分和指定拆分:
a=np.floor(10*np.random.random((12,2))) print(a) print(np.vsplit(a,3))
矩陣的豎向拆分:
import numpy as np a=np.arange(12) b=a print(b is a ) b.shape=3,4 print(a.shape) print(id(a)) print(id(b)) c=a.view() print(c is a) c.shape=2,6 print(a.shape) c[0,4]=1234 print(a) print(id(a)) print(id(c)) d=a.copy() print(d is a) d[0,0]=9999 print(a) print(d)
矩陣的幾種複製:
import numpy as np data=np.sin(np.arange(20)).reshape(5,4) print(data) ind=data.argmax(axis=0) print(ind) data_max=data[ind,range(data.shape[1])] print(data_max)
矩陣豎向找最大值索引並將其打印出來:
a=np.arange(0,40,10) print(a) b=np.tile(a,(2,3)) print(b)
矩陣的成倍擴大:
import numpy as np a=np.array([[4,3,5],[1,2,1]]) print(a) b=np.sort(a,axis=1) print(b) a.sort(axis=0) print(a) a=np.array([4,3,1,2]) j=np.argsort(a) print(j) print(a[j])
矩陣的橫向排序、豎向排序和遞增索引排序: