【问题标题】:how to create identity matrix without eye and loop如何创建没有眼睛和循环的单位矩阵
【发布时间】:2014-12-07 13:34:46
【问题描述】:

我只是想知道是否可以创建一个没有眼睛函数、循环和任何 matlab 内置函数的单位矩阵。起初我想用这样的东西:

A = bsxfun(@power, 1:n, (1:n).');

不幸的是,我不认为我可以在不使用任何循环的情况下分配值“1”和“0”。这仍然使用构建功能。有什么想法吗?

【问题讨论】:

  • bsxfun 不算作 Matlab 内置函数吗?
  • 除了作为学习练习之外,我不明白这有什么意义。如果bsxfun 可以接受,那么diag(ones(1,n)) 怎么样?

标签: matlab


【解决方案1】:

使用A(1:n+1:end) 引用应该为1 的A 元素的巧妙技巧,您可以简单地执行以下操作:

A=zeros(n^2,1);
A(1:n+1:end)=1;

MrAzzaman 建议通过使用 A(n,n)=0; 来初始化 A 来避免使用 zeros

【讨论】:

  • 您不需要将AB 分开 - 只需进行A = zeros(n); A(1:n+1:end)=1;
  • 我认为零可以被认为是内置函数,对吧?
  • @David 您可以使用以下命令避免“内置”函数zerosclear A; A(n,n)=0; A(1:n+1:end)=1;
  • @MrAzzaman 不错。您可能应该在此阶段将其发布为您自己的答案!
  • @David Eh,它在很大程度上只是重复你的答案,稍作调整。其实没必要。
【解决方案2】:

如果bsxfun 被允许,那么

I = bsxfun( @eq, 1:n, (1:n).' );

【讨论】:

    【解决方案3】:

    其中 num 是 nxn 矩阵的大小。

    function matrix = identity_matrix(num)
    matrix = zeros(num);   //this creates a new n by n zero matrix
    matrix(1:num+1:end)=1;
    

    【讨论】:

    • 与大卫的回答几乎相同。看不出这如何增加任何新内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多