1. 程式人生 > 實用技巧 >numpy的學習筆記

numpy的學習筆記

本次筆記學習教程出自:https://cs231n.github.io/python-numpy-tutorial/

Numpy的使用:

import numpy as np

1.numpy陣列的基本使用和操作:

import numpy as np

a=np.array([[1,2,3],[4,5,6]])#自定義一個Numpy陣列a
print('array a is \n'+str(a)+'\n and the shape is '+str(a.shape)+'\n and the type is '+str(type(a)))
#Prints "
#array a is 
#[[1 2 3]
# [4 5 6]] # and the shape is (2, 3) # and the type is <class 'numpy.ndarray'> #" #a.shape可以得到陣列a的形狀 print(a[0,0],a[0,1],a[1,0])#引用陣列具體元素 a[0,0]=99 #更改陣列的元素值的方法和變化列表的方法一樣 print(a) #建立各種特殊矩陣/陣列: b=np.zeros((3,2)) print('b is '+str(b)) b=np.ones((2,3)) print('b is '+str(b)) b=np.full((2,2),7) print('
b is '+str(b)) b=np.eye(3)#建立單位矩陣 print('b is '+str(b)) b=np.random.random((3,1))#建立隨機矩陣,但元素只是在(0,1)之間隨機 print('b is '+str(b))

2.切片操作:

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a[:2,1:3]#切片,只取[0,2)行和[1,3)列的交集
print(a)
print(b)
c=a[1,1:3]#切出來的只是一行數字,不算是個矩陣
d=a[1:2,1:3]#切出來的是一個1*2的矩陣
print(c,c.shape) print(d,d.shape) a=np.array([[1,2],[3,4],[5,6]]) print(a) print(a[[0,1,2],[0,1,0]])#輸出a[0,0],a[1,1],a[2,0] a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) b=np.array([0,2,0,1]) print(a[np.arange(4),b])#np.arange(4)=[0.1.2.3] print(a) a[np.arange(4),b]+=10 print(a)

3.布林型別索引:

import numpy as np
#布林型別陣列索引
a=np.array([[1,2],[3,4],[5,6]])
bool_idx=(a>3)
print(bool_idx)
#prints [[False False]
#       [False  True]
#       [ True  True]]
print(a[bool_idx]) #prints [4 5 6]

4.基本運算操作等:

import numpy as np
a=np.array([[1,2],[2,3]])
print(a.dtype)#顯示陣列的資料型別

#numpy陣列的運算
b=np.array([[2,3],[4,5]])

#加法
print(a+b)
#相當於
print(np.add(a,b))

#減法
print(a-b)
#相當於
print(np.subtract(a,b))

#乘法,不是矩陣乘法
print(a*b)
print(np.multiply(a,b))

#除法
print(a/b)
print(np.divide(a,b))

#開方
print(np.sqrt(a))

#矩陣乘法
print(a.dot(b))
print(np.dot(a,b))
#prints [[10 13]
#       [16 21]]

print(b.dot(a))
print(np.dot(b,a))
#prints [[ 8 13]
#       [14 23]]

5.其他方法(sum,轉置):

import numpy as np
print(a)
#sum運算
a=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(np.sum(a))#所有元素相加
print(np.sum(a,axis=0))#三維陣列中的第一個向量上相加
#prints [[ 6  8]
#       [10 12]]
print(np.sum(a,axis=1))#列上相加
#prints [[ 4  6]
#       [12 14]]

print(np.sum(a,axis=2))#行上相加
#prints [[ 3  7]
#       [11 15]]

#轉置矩陣
print(a.T)

6.廣播,broadcasting:

#Broadcasting
import numpy as np
x=np.array([[1,2,3],[4,5,6],[7,8,9]])
v=np.array([1,0,1])
y=np.empty_like(x)#y=x
print(y)
for i in range(3):
    y[i,:]=x[i,:]+v
print(y)

a=np.array([1,2,3])
b=np.array([4,5])
print(np.reshape(a,(3,1))*b)
#先使得v從(3,)的shape變成(3,1),然後再和b廣播變成shape為(3,2)
#prints [[ 4  5]
#       [ 8 10]
#      [12 15]]