• 全方位剖析Numpy中的np.diag源代码


     Numpy中内置的函数diag是一个变化莫测的函数。

    这是np.diag函数的源代码:

    1. def diag(v, k=0):
    2. v = asanyarray(v)
    3. s = v.shape
    4. if len(s) == 1:
    5. n = s[0]+abs(k)
    6. res = zeros((n, n), v.dtype)
    7. if k >= 0:
    8. i = k
    9. else:
    10. i = (-k) * n
    11. res[:n-k].flat[i::n+1] = v
    12. return res
    13. elif len(s) == 2:
    14. return diagonal(v, k)
    15. else:
    16. raise ValueError("Input must be 1- or 2-d.")

    我们可以看出np.diag函数可以传入的参数有 v k

    对于v:

            v是一个数组。(一维或者二维)

            当v是一个一维数组时,结果形成一个以一维数组为对角线元素的矩阵;

            当v是一个二维矩阵时,结果输出矩阵的对角线元素。

    对于k:

            k默认等于零,意味着取对角线,位置不偏移。

            如果k > 0,那么取或者放对角线上面第k斜行。

            如果k < 0,那么取或者放对角线下面第k斜行。

    使用案例帮助理解:

           假设现在有这样一个数组array:

    1. >>> array
    2. array([[1, 2, 3],
    3. [4, 5, 6],
    4. [7, 8, 9]])

            v :二维数组,k:0 

    1. >>> np.diag(a)
    2. array([1, 5, 9])

             v:一维数组,k:0

    1. # 把上面的array([1, 5, 9])作为输入, 即np.diag(array) = [1, 5, 9]
    2. >>> np.diag(np.diag(a))
    3. array([[1, 0, 0],
    4. [0, 5, 0],
    5. [0, 0, 9]])

             v:二维数组,k:1

    1. >>> np.diag(array, 1)
    2. array([2, 6])

              v:一维数组,k:1

    1. # 把上面的array([1, 5, 9])作为输入, 即np.diag(array) = [1, 5, 9]
    2. >>> np.diag(np.diag(array), 1)
    3. array([0 1 0 0]
    4. [0 0 5 0]
    5. [0 0 0 9]
    6. [0 0 0 0]])

  • 相关阅读:
    05.大模型&大数据量
    【无标题】
    HarmonyOS Next 系列之HTTP请求封装和Token持久化存储(四)
    Centos7部署单机版MongoDB
    Python线程和进程
    我不允许你还不知道这本助你斩获高薪offer的神书
    迅为RK3568开发板RTMP推流之视频监控
    前端+elementui
    安卓之高级控件Listview的优化
    皕杰报表在tomcat的server.xml中配置了什么?
  • 原文地址:https://blog.csdn.net/qq_51831335/article/details/126113786