CS231n课程笔记翻译:python Numpy教程
记录下numpy
一维矩阵基础操作
import numpy as np
a =np.array([10 ,20 ,30 ,40 ])
b=np.arange(4 )
c=a -b
c=a +b
c=a *b
c=b**2
c=10 *np.sin (a )
print(b<3 )
多维矩阵基础操作
a=np.array([[1,1],[0,1]] )
b=np.arange(4 ).reshape((2 ,2 ))
print (a)
# array([[1, 1],
# [0, 1]] )
print (b)
# array([[0, 1],
# [2, 3]] )
方法一
c_dot = np.dot(a,b)
# array([[2, 4],
# [2, 3]] )
方法二
c_dot_2 = a.dot(b)
# array([[2, 4],
# [2, 3]] )
import numpy as np
a=np.random.random((2 ,4 ))
print (a)
# array([[ 0.94692159, 0.20821798, 0.35339414, 0.2805278 ],
# [ 0.04836775, 0.04023552, 0.44091941, 0.21665268]] )
np.sum(a) # 4.4043622002745959
np.min(a) # 0.23651223533671784
np.max(a) # 0.90438450240606416
print ("a =" ,a)
# a = [[ 0.23651224 0.41900661 0.84869417 0.46456022]
# [ 0.60771087 0.9043845 0.36603285 0.55746074]]
print ("sum =" ,np.sum(a,axis=1 ))
# sum = [ 1.96877324 2.43558896 ]
print ("min =" ,np.min(a,axis=0 ))
# min = [ 0.23651224 0.41900661 0.36603285 0.46456022 ]
print ("max =" ,np.max(a,axis=1 ))
# max = [ 0.84869417 0.9043845 ]
对应元素的索引
import numpy as np
A = np.arange(2 ,14 ).reshape((3 ,4 ))
# array([[ 2, 3, 4, 5]
# [ 6, 7, 8, 9]
# [10,11,12,13]] )
print (np.argmin(A)) # 0
print (np.argmax(A)) # 11
print (np.mean(A)) # 7.5
print (np.average(A)) # 7.5
print (A.mean()) # 7.5
print (np.median()) # 7.5
print (np.cumsum(A))
# [2 5 9 14 20 27 35 44 54 65 77 90 ]
print (np.diff(A))
# [[1 1 1]
# [1 1 1]
# [1 1 1]]
print (np.nonzero(A))
#(array([0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,2 ]),array([0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ,0 ,1 ,2 ,3 ]))这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
import numpy as np
A = np.arange(14 ,2 , -1 ).reshape((3 ,4 ))
# array([[14, 13, 12, 11],
# [10, 9, 8, 7],
# [ 6, 5, 4, 3]] )
print (np.sort(A))
# array([[11,12,13,14]
# [ 7, 8, 9,10]
# [ 3, 4, 5, 6]] )
print (np.transpose(A))
print (A.T)
# array([[14,10, 6]
# [13, 9, 5]
# [12, 8, 4]
# [11, 7, 3]] )
# array([[14,10, 6]
# [13, 9, 5]
# [12, 8, 4]
# [11, 7, 3]] )
print (A)
# array([[14,13,12,11]
# [10, 9, 8, 7]
# [ 6, 5, 4, 3]] )
print (np.clip(A,5 ,9 ))
# array([[ 9, 9, 9, 9]
# [ 9, 9, 8, 7]
# [ 6, 5, 5, 5]] )
矩阵的元素索引
import numpy as np
A = np.arange(3 ,15 )
print(A[3 ])
A = np.arange(3 ,15 ).reshape((3 ,4 ))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
"""
print(A[2 ])
print(A[1 ][1 ])
print(A[1 , 1 ])
print(A[1 , 1 :3 ])
for row in A:
print(row)
"""
[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]
"""
for column in A.T:
print(column)
"""
[ 3, 7, 11]
[ 4, 8, 12]
[ 5, 9, 13]
[ 6, 10, 14]
"""
import numpy as np
A = np.arange(3 ,15 ).reshape((3 ,4 ))
print(A.flatten())
for item in A.flat:
print(item)
……
矩阵的合并
import numpy as np
A = np.array([1 ,1 ,1 ])
B = np.array([2 ,2 ,2 ])
上下合并
print(np.vstack((A,B)))
"""
[[1,1,1]
[2,2,2]]
"""
C = np.vstack((A,B))
print(A.shape(),C.shape())
左右合并
D = np.hstack((A,B))
print(D)
print(A.shape(),D.shape())
注意:此时A是一个数列,并不是一个矩阵,其不具备矩阵转置操作的性质,我们需要借助其他的函数进行转置!
print(A[np.newaxis,:])
print(A[np.newaxis,:].shape)
print(A[:,np.newaxis])
"""
[[1]
[1]
[1]]
"""
print(A[:,np.newaxis].shape)
归纳总结下
import numpy as np
A = np.array([1 ,1 ,1 ])[:,np.newaxis]
B = np.array([2 ,2 ,2 ])[:,np.newaxis]
C = np.vstack((A,B))
D = np.hstack((A,B))
print(D)
"""
[[1 2]
[1 2]
[1 2]]
"""
print(A.shape,D.shape)
连接多个矩阵的时候,我们用concatenate可能会更加方便
C = np.concatenate((A,B,B,A),axis=0 )
print(C)
"""
array([[1],
[1],
[1],
[2],
[2],
[2],
[2],
[2],
[2],
[1],
[1],
[1]])
"""
D = np.concatenate((A,B,B,A),axis=1 )
print(D)
"""
array([[1, 2, 2, 1],
[1, 2, 2, 1],
[1, 2, 2, 1]])
"""
矩阵的分割
import numpy as np
A = np.arange(12 ).reshape((3 , 4 ))
print(A)
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
纵向分割
print(np.split(A, 2 , axis=1 ))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
横向分割
print(np.split(A, 3, axis=0))
# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
"""
错误的分割
print(np.split(A, 3 , axis=1 ))
为此我们引进不等量的分割
print(np.array_split(A, 3 , axis=1 ))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
"""
其他分割方式
print(np.vsplit(A, 3 ))
print(np.hsplit(A, 2 ))
"""
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
"""
赋值的关联性
import numpy as np
a = np.arange(4 )
b = a
c = a
d = b
改变a 的第一个数值
a [0 ] = 11
print(a )
b、c、d也随之改变
b is a
c is a
d is a
于是引入copy()
b = a .copy()
print(b)
a [3 ] = 44
print(a )
print(b)
此时a 和b已经没有关联了