prerequisite-autograd

numpy.eye() 生成对角矩阵  

numpy.eye(N,M=None, k=0, dtype=<type 'float'>)

关注第一个第三个参数就行了

第一个参数:输出方阵(行数=列数)的规模,即行数或列数

第三个参数:默认情况下输出的是对角线全“1”,其余全“0”的方阵,如果k为正整数,则在右上方第k条对角线全“1”其余全“0”,k为负整数则在左下方第k条对角线全“1”其余全“0”。

>>> np.eye(2, dtype=int)
array([[1, 0],
       [0, 1]])
>>> np.eye(3, k=1)
array([[ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  0.]])

官方手册:http://docs.scipy.org/doc/numpy/reference/generated/numpy.eye.html  1

 

np.ones



import numpy as np 
help(np.ones)


Help on function ones in module numpy.core.numeric:

ones(shape, dtype=None, order='C')
    Return a new array of given shape and type, filled with ones.
    
    Parameters
    ----------
    shape : int or sequence of ints
        Shape of the new array, e.g., ``(2, 3)`` or ``2``.
    dtype : data-type, optional
        The desired data-type for the array, e.g., `numpy.int8`.  Default is
        `numpy.float64`.
    order : {'C', 'F'}, optional
        Whether to store multidimensional data in C- or Fortran-contiguous
        (row- or column-wise) order in memory.
    
    Returns
    -------
    out : ndarray
        Array of ones with the given shape, dtype, and order.
    
    See Also
    --------
    zeros, ones_like
    
    Examples
    --------
    >>> np.ones(5)
    array([ 1.,  1.,  1.,  1.,  1.])
    
    >>> np.ones((5,), dtype=np.int)
    array([1, 1, 1, 1, 1])
    
    >>> np.ones((2, 1))
    array([[ 1.],
           [ 1.]])
    
    >>> s = (2,2)
    >>> np.ones(s)
    array([[ 1.,  1.],
           [ 1.,  1.]])

 

np.dot()的使用

dot()返回的是两个数组的点积(dot product)

1.如果处理的是一维数组,则得到的是两数组的內积

In : d = np.arange(0,9)
Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In : e = d[::-1]
Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

In : np.dot(d,e) 
Out: 84

2.如果是二维数组(矩阵)之间的运算,则得到的是矩阵积(mastrix product)。

In : a = np.arange(1,5).reshape(2,2)
Out:
array([[1, 2],
       [3, 4]])

In : b = np.arange(5,9).reshape(2,2)
Out: array([[5, 6],
            [7, 8]])

In : np.dot(a,b)
Out:
array([[19, 22],
       [43, 50]])

3.dot()函数可以通过numpy库调用,也可以由数组实例对象进行调用。a.dot(b) 与 np.dot(a,b)效果相同。

矩阵积计算不遵循交换律,np.dot(a,b) 和 np.dot(b,a) 得到的结果是不一样的。

 

矩阵乘以其矩阵转置

在推导公式和计算中,常常能碰到矩阵乘以其矩阵转置,在此做个总结。

1.假设矩阵A是一个 m∗n

矩阵,那么
A∗AT 得到一个 m∗m 矩阵,AT∗A 得到一个 n∗n

的矩阵,这样我们就能得到一个方矩阵。
看一个例子:

Xθ=H

求解θ.
XTXθ=XTH 这个矩阵X我们不能确定是否是方矩阵,所以我们在其左侧同时乘以X矩阵的转置,这样 就在θ 的左侧得到一个方矩阵。
(XTX)−1XTXθ=(XTX)−1XTH 再在等式的两边乘以XTX的逆,就变成了单位矩阵I和θ相乘,这样我们就得到了θ的解:
θ=(XTX)−1XTH

2.对称矩阵
如果方阵A满足AT=A

,就称A为对称矩阵。
假设A=XTX,A的转置AT=(XTX)T=XTX=A,所以我们可以说(XTX)

是一个对称矩阵。对称矩阵的特征向量两两正交。

3.奇异值分解(SVD)
我们可以用与A相关的特征分解来解释A的奇异值分解。A的左奇异向量是AAT

的特征向量,A的右奇异向量是ATA的特征向量,A的非零奇异值是ATA特征值的平方根,同时也是AAT特征值的平方根。 2

 

assert (x.grad - 4 * x).norm().asscalar() == 0

nd.norm(b).asscalar()是说,把b中的所有元素都平方后,加起来,然后开根号

 

对函数 y=2x⊤x 求关于列向量 x 的梯度

函数 y=2x⊤x 关于x 的梯度应为4x

 


Reference:

1.https://blog.csdn.net/chixujohnny/article/details/51011931

2.https://blog.csdn.net/Mao_Jonah/article/details/82118878

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值