matlab - 在任何偏移对角线上创建一个矩阵
问题描述
我的目标是创建一个在偏移对角线上创建矩阵的函数:
与函数非常相似eye(5)
,但现在在偏移对角线上。最好不要使用双for
循环。我不想要完整的矩阵,而是必须将它们插入现有的矩阵中。我怎样才能做到这一点?
解决方案
diag
内置此功能:
diag(ones(4,1),1)
ans =
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0
diag(ones(4,1),-1)
ans =
0 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
其中的语法diag(V,k)
是:V
是要放在对角线上的向量(无论是一个,还是任何奇数向量),并且k
是对角线的标签。0
是主对角线,正整数越远离上对角线,负整数越远离下对角线;iek=1
给出第一个上对角线,k=-4
在这个例子中给出左下角。
为了完整起见,如果您只想要索引而不是完整矩阵(因为您建议要将向量插入到当前矩阵中),您可以使用以下函数:
function [idx] = diagidx(n,k)
% n size of square matrix
% k number of diagonal
if k==0 % identity
idx = [(1:n).' (1:n).']; % [row col]
elseif k>0 % Upper diagonal
idx = [(1:n-k).' (1+k:n).'];
elseif k<0 % lower diagonal
idx = [(1+abs(k):n).' (1:n-abs(k)).'];
end
end
其中每一行idx
包含矩阵的索引。
推荐阅读
- java - Sql server jdbc 驱动程序试图通过错误的用户名进行连接。JDBC 使用集成安全/Windows 身份验证和用户名、密码
- python - 如何使用 numpy 构建 3D 模型?
- python - 使用包含字符串的 numpy 数组查找特定列的总和?
- android - 从 API 23 但不是 27 上的电话返回时的 MEDIA_ERROR_SERVER_DIED
- macos - 在 OSX 上的 Clion 中使用 Skia
- angular - 使用服务在组件之间共享数据
- python - 将所有数组保存到 csv 中,而不是仅保存最后一组数组
- android - 如何在android studio中显示多段文字
- amazon-web-services - 如何将项目源文件夹链接到现有 Elastic Beanstalk 应用程序?
- java - Cucumber Java:功能文件映射到步骤定义