当前位置:网站首页>全方位剖析Numpy中的np.diag源代码
全方位剖析Numpy中的np.diag源代码
2022-08-02 10:04:00 【舞雩.】
Numpy中内置的函数diag是一个变化莫测的函数。
这是np.diag函数的源代码:
def diag(v, k=0):
v = asanyarray(v)
s = v.shape
if len(s) == 1:
n = s[0]+abs(k)
res = zeros((n, n), v.dtype)
if k >= 0:
i = k
else:
i = (-k) * n
res[:n-k].flat[i::n+1] = v
return res
elif len(s) == 2:
return diagonal(v, k)
else:
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:
>>> array
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
v :二维数组,k:0
>>> np.diag(a)
array([1, 5, 9])
v:一维数组,k:0
# 把上面的array([1, 5, 9])作为输入, 即np.diag(array) = [1, 5, 9]
>>> np.diag(np.diag(a))
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
v:二维数组,k:1
>>> np.diag(array, 1)
array([2, 6])
v:一维数组,k:1
# 把上面的array([1, 5, 9])作为输入, 即np.diag(array) = [1, 5, 9]
>>> np.diag(np.diag(array), 1)
array([0 1 0 0]
[0 0 5 0]
[0 0 0 9]
[0 0 0 0]])
边栏推荐
- Supervised learning of Li Hang's "Statistical Learning Methods" Notes
- R language time series data arithmetic operation: use the log function to log the time series data, and use the diff function to calculate the successive difference of the logarithmic time series data
- HikariCP数据库连接池,太快了!
- 关于缓存数据的探讨
- 21年毕业转行软件测试,从0收入到月薪过万,我真的很幸运...
- leetcode 62. Unique Paths(独特的路径)
- R语言使用zoo包中的rollapply函数以滚动的方式、窗口移动的方式将指定函数应用于时间序列、设置align参数指定结果数据中的时间标签取自窗口中的位置(参数right指定取自窗口的最右侧)
- npm ERR! 400 Bad Request - PUT xxx - Cannot publish over previously published version “1.0.0“.
- 软件测试的基本理论知识(软件测试面试基础知识)
- QT专题:自定义部件
猜你喜欢
【新版干货书】深度伪造 (DeepFakes):创造,检测和影响
周杰伦新歌发布,爬取《Mojito》MV弹幕,看看粉丝们都说的些啥!
图形化矩阵,矩阵到底长什么样?
链表的实现
第十六章 协程
In the whole development of chi V853 board tried to compile QT test
Re23:读论文 How Does NLP Benefit Legal System: A Summary of Legal Artificial Intelligence
STL中list实现
从零开始入门单片机(一):必会背景知识总结
The heavyweights are coming!Spoilers for the highlights of the Alibaba Cloud Life Science and Intelligent Computing Summit
随机推荐
斯皮尔曼相关系数
后管实现面包屑功能
程序员的浪漫七夕
8月份的.NET Conf 活动 专注于 .NET MAUI
重磅大咖来袭!阿里云生命科学与智能计算峰会精彩内容剧透
迭代器失效问题
从零开始入门单片机(一):必会背景知识总结
The heavyweights are coming!Spoilers for the highlights of the Alibaba Cloud Life Science and Intelligent Computing Summit
开源一夏 | GO语言框架中如何快速集成日志模块
周鸿祎称微软抄袭 360 安全模式后发文否认;英特尔CEO基辛格回应市值被AMD超越:股价下跌是咎由自取|极客头条...
R language ggplot2 visualization: based on the fill parameter and shape parameter in the aes function, custom draw a grouped line chart and add data points (scatter points), use the legend.position fu
Unknown content monitoring
阿里巴巴 CTO 程立:开源是基础软件的源头!
Rust 从入门到精通03-helloworld
每日一题练习1-15
读博一年后对机器学习工程的思考
【新版干货书】深度伪造 (DeepFakes):创造,检测和影响
用正向迭代器封装实现反向迭代器
Shell脚本实现多选DNS同时批量解析域名IP地址(新更新)
Weak yen turns game consoles into "financial products" in Japan: scalpers make big profits