0一、python數據分析與機器學習實戰——Python科學計算庫-Numpy

深度學習——學習目錄

NumPy介紹

NumPy系統是Python的一種開源的數值計算擴展。
這種工具可用來存儲和處理大型矩陣,
比Python自身的嵌套列表(nested list structure)結構要高效的多
(該結構也能夠用來表示矩陣(matrix))。python

numpy基礎

矩陣運算

矩陣和數的計算:
加法四則運算:
一個矩陣與一個數字進行四則運算就是把矩陣中的每個元素都與這個數字進行四則運算: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])

矩陣的橫向排序、豎向排序和遞增索引排序:
在這裏插入圖片描述

相關文章
相關標籤/搜索