主要根据的是这学期修的一门data science and analysis课程里的lab,自己做完lab之后会反思一下自己学到的内容吧。
然后这周lab的话主要是用numpy来处理矩阵(毕竟numpy可以有效地处理数组)。
创建矩阵
np.zeros(k), np.ones(k) #一维矩阵 np.zeros((x,y)), np.ones((x,y)) #二维矩阵,x行y列 np.array(list) #将list转化为numpy array np.copy(m) #复制一份
以上是比较基本的,这里还有一个np.arange(stop)方法,可以创建一个0,1,2,…… ,stop-1的numpy array
矩阵的性质
np.shape(), m.shape #可以知道矩阵几行几列,比如m.shape = (2,2),就是二行二列, #一般可以利用这点来设置循环 np.size(), m.size #可以知道矩阵里总共有多少个元素(行×列)
lab中创建矩阵的办法
其中有道题要求创建如下图的矩阵:
x_extend = np.column_stack((x,np.ones(x.shape[0],x.dtype)))
用的是np.column_stack((第一列,第二列)),要注意括号的数量!!!
矩阵的运算
四则运算
批注:注意这里的矩阵乘法,和线性代数里的矩阵乘法不同,这里的矩阵是相同位置的元素相乘,要求两个矩阵的行和列都要相等。
转置运算
简单来说就是两种方法吧~
解矩阵方程
矩阵点乘
第一,A.dot(B)和dot(A,B)表示AB。
第二,也是我觉得最神奇的一点,当v是vector的时候v.dot(A)竟然表示的是v的转置乘A(捂脸),竟然不用转置。。。如下:
按理说,S是2×3,X[i]是1×3,竟然不用转置的, 反正有点迷。也有可能是我考虑错了。
第三,求矩阵的逆的方法是np.linalg.inv(matrix)
第四,向量的外积,yysy,我没有见过(看以后会不会在实践中遇到吧)
求矩阵的逆
然后关于求矩阵的逆,有一点是建议不要求逆。。。accuracy - Practical example of why it is not good to invert a matrix - Computational Science Stack Exchange但比较神奇的是,这份lab里面解矩阵方程时还是用矩阵的逆来做的,,,
所以我也很好奇如果不用矩阵的逆怎么解方程。。。
二次型的求法
python - How to vectorize the evaluation of bilinear & quadratic forms? - Stack Overflow
明天继续。。。