【问题标题】:Indexing ones into a matrix of zeros without loops将 1 索引到零矩阵中,无需循环
【发布时间】:2017-12-07 06:12:44
【问题描述】:

我是 MATLAB 的新手,我需要一些帮助来解决这个问题。

问题是编写一个函数来创建一个 (n-n) 方阵,该方阵由 0 组成,反向对角线上为 1 我试过这段代码:

function s=reverse_diag(n)
    s=zeros(n);
    i=1;j=n;
    while i<=n && j>=1
        s(i,j)=1;
        i=i+1;
        j=j-1;
    end

但我想要另一种方法来解决它,而不使用循环或诊断和眼睛命令。

提前致谢

【问题讨论】:

  • 为什么要在没有 diag 和 eye 命令的情况下解决它?
  • 提示:查看bsxfun(@eq, 1:n, (1:n).')的结果。尝试了解它是如何工作的,并将其转化为您想要的输出
  • 感谢 Luis,我正在寻找它现在的工作原理

标签: arrays matlab matrix matrix-indexing


【解决方案1】:

在没有循环的情况下实现这一目标的最简单和最明显的方法是使用

s=fliplr(eye(n))

既然您声明不想使用 eye(无论出于何种原因),您也可以使用 sub2ind-command。它看起来像这样:

s=zeros(n);
s(sub2ind(size(s),1:size(s,1),size(s,2):-1:1))=1

【讨论】:

  • 谢谢你 max ...这正是我想要的:D
  • @RuneKnight 不客气。如果您想习惯 matlab 中的矢量化,您还应该考虑处理 Luis Mendos 的评论,因为 bsxfun 是一个很棒的工具。
  • 我目前正在研究这个命令是如何工作的......但是你所说的矢量化是什么意思?
  • @RuneKnight 查看矢量化标签描述:stackoverflow.com/tags/vectorization/info。矢量化意味着在整个数组上使用函数而不是循环遍历数组。
猜你喜欢
  • 2021-05-24
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多