【问题标题】:Creating a square identity matrix [closed]创建一个正方形单位矩阵[关闭]
【发布时间】:2015-10-18 14:26:03
【问题描述】:

编写一个名为identity 的函数,它创建一个单位单位矩阵,该矩阵是一个除对角线(从左上到右下)的元素为 1 之外元素为 0 的矩阵。对角线由行和列索引相同的元素中:(1,1)、(2,2) 等。

该函数接受一个正整数输入参数,即矩阵的大小,并将矩阵本身作为输出参数返回。

例如,identity(4) 必须返回一个 4×4 单位矩阵。

您不能使用内置的eyediag 函数。

(提示:您可以使用单个索引对矩阵进行索引,并且 MATLAB 将处理它,就好像它是使用列优先顺序的向量一样。)

【问题讨论】:

  • 这很容易实现,听起来像是功课。你的研究工作在哪里?请阅读how to ask 并在之后编辑您的问题。展示您迄今为止所做的尝试以及解决此问题的想法。
  • 或者你可以这样做fix(corrcoef(rand(10,10))) :) 这不是一个好方法,但它会做你需要的。

标签: matlab matrix


【解决方案1】:

假设您可以使用内置函数zeros()eye() 函数的可能实现如下:

function matrix = identity(n)
    out = zeros(n);
    idx = 1:n+1:n^2;
    out(idx) = 1;
    matrix = out;
end

【讨论】:

    【解决方案2】:

    让我们用两行简单的代码来实现,并且没有zeros... 第一行创建一个n x n 矩阵,其中所有元素都是0。在您可以(如您的提示所说)使用单个参数处理元素之后。单位矩阵中的距离为n+1。这样,您就可以将具有上述距离的那些写到最后。

    function out = identity(n)
        out(n,n)       = 0;
        out(1:n+1:end) = 1;
    end
    

    【讨论】:

    • 您知道A(n,n)=0A=zeros(n) 之间是否存在性能差异?
    • 哇哦,我刚刚测试了这个,对于N=10000,你的方法需要0.000255秒,而zeros(N)需要1.106566秒。我一直认为,标准方法是使用zeros(N)
    • @sonystarmap 查看this 关于未记录 Matlab 的文章。不要错过«预分配的变体»部分。
    【解决方案3】:

    你可以从基础开始:

    function M = identity(n)
        M = zeros(n);
        for i=1:n
            M(i,i) = 1;
        end
    end
    

    与任何其他语言的代码几乎相同...

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多