提问人:yasaman 提问时间:7/28/2015 最后编辑:Amroyasaman 更新时间:7/28/2015 访问量:2069
创建正方形单位矩阵 [已关闭]
Creating a square identity matrix [closed]
问:
编写一个名为的函数,该函数创建一个正方形单位矩阵,该矩阵是一个元素为 0 的矩阵,但对角线上(从左上角到右下角)的元素值为 1 除外。对角线由行和列索引相同的元素组成:(1,1)、(2,2) 等。identity
该函数接受一个正整数输入参数,即矩阵的大小,并将矩阵本身作为输出参数返回。
例如,必须返回一个 4×4 的单位矩阵。identity(4)
您不能使用内置或函数。eye
diag
(提示:您可以使用单个索引索引到矩阵中,MATLAB 将使用列优先顺序将其处理为向量。
答:
0赞
josoler
7/28/2015
#1
假设您可以使用内置函数,该功能的可能实现如下:zeros()
eye()
function matrix = identity(n)
out = zeros(n);
idx = 1:n+1:n^2;
out(idx) = 1;
matrix = out;
end
2赞
Matt
7/28/2015
#2
让我们用两行简单的行来完成,没有......第一行创建一个矩阵,其中所有元素都是 。之后,您可以(如您的提示所说)使用单个参数来处理元素。单位矩阵中 1 之间的距离为 。这样,您可以将上述距离的那些写到最后。zeros
n x n
0
n+1
function out = identity(n)
out(n,n) = 0;
out(1:n+1:end) = 1;
end
评论
0赞
Thomas
7/28/2015
你知道吗,如果 和 之间存在性能差异?A(n,n)=0
A=zeros(n)
0赞
Thomas
7/28/2015
哦,哇,我刚刚测试过这个,对于 ,您的方法需要 0.000255 秒,而需要 1.106566 秒。我一直认为,标准方法是使用 .N=10000
zeros(N)
zeros(N)
0赞
Matt
7/28/2015
@sonystarmap 查看这篇关于未记录的 Matlab 的文章。不要错过“预分配的变体”部分。
1赞
Amro
7/28/2015
#3
您可以从基础开始:
function M = identity(n)
M = zeros(n);
for i=1:n
M(i,i) = 1;
end
end
与任何其他语言几乎相同的代码......
评论
fix(corrcoef(rand(10,10)))