Python数据分析(1)Matrix Manipulation

主要根据的是这学期修的一门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

明天继续。。。