numpy.array中的运算
给定一个向量,让向量中每一个数乘以2
a=(0,1,2)
a * 2=(0,2,4)
n=10
L = [i for i in range(n)]
2 * L
'''
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
两个L首尾衔接
'''
A=[]
for e in L:
A.append(2 * e)
%%time
A=[]
for e in L:
A.append(2 * e)
#310ms
%%time
A=[2*e for e in L]
#155ms
import numpy as np
%%time
A=np.array(2*e for e in L)
#15.9ms
%%time
A=2*L
#7.8ms
Universal Functions
X = np.arange(1,16).reshape((3,5))
X+1
X-1
X*2
X/2#浮点
X//2#整数
X ** 2#X^2
'''
array([[ 1, 4, 9, 16, 25],
[ 36, 49, 64, 81, 100],
[121, 144, 169, 196, 225]], dtype=int32)
'''
X%2
'''
array([[1, 0, 1, 0, 1],
[0, 1, 0, 1, 0],
[1, 0, 1, 0, 1]], dtype=int32)
'''
1/X
np.abs(X)
np.sin(X)
np.exp(X)
np.power(3,X)
=3**X
#3^X
np.log(X)
#lnx
np.log2(X)
矩阵运算
A=np.arange(4).reshape(2,2)
B=np.full((2,2),10)
A+B
A*B
#对应元素进行运算
A.dot(B)
#矩阵乘法
A.T
#转置
向量和矩阵的运算
v=np.array([1,2])
v+A
'''
array([[1, 3],
[3, 5]])
'''
#和矩阵的每一行做加法
A.shape
#(2,2)
A.shape[0]
#A的行数
np.vstack([v] * A.shape[0])
#将v向量叠了两次
np.vstack([v] * A.shape[0])+A
np.tile(v,(2,1))
#将v向量横向叠2次 纵向叠一次
v*A
'''
array([[0, 2],
[2, 6]])
'''
v.dot(A)
'''
array([4, 7])
'''
A.dot(v)
'''
array([2, 8])
'''
#v自动变为列向量
矩阵的逆
invA=np.linalg.inv(A)
#只能对 方阵 求逆矩阵
X=np.arange(16).reshape((2,8))
np.linalg.pinv(X)
#伪逆矩阵
'''
array([[-1.35416667e-01, 5.20833333e-02],
[-1.01190476e-01, 4.16666667e-02],
[-6.69642857e-02, 3.12500000e-02],
[-3.27380952e-02, 2.08333333e-02],
[ 1.48809524e-03, 1.04166667e-02],
[ 3.57142857e-02, -3.46944695e-18],
[ 6.99404762e-02, -1.04166667e-02],
[ 1.04166667e-01, -2.08333333e-02]])
'''