【问题标题】:Create a matrix with A(i, j) = i*j用 A(i, j) = i*j 创建一个矩阵
【发布时间】:2015-03-30 09:54:00
【问题描述】:

我在练习科迪问题:

有时,我们都必须记住无聊的时间表。 5 乘以 5 等于 25。5 乘以 6 等于 30。12 乘以 12 比你想象的要多。

使用 MATLAB,时间表应该很简单!编写一个函数,将时间表输出到请求的大小。

我用下面的代码解决了。

function m = timestables(n)
for i =1:n
    for j = 1:n
        m(i,j) = i*j;
    end
end
end

我可以在没有for 循环的情况下编写它并提高我的分数吗?

它可能看起来很愚蠢,但它对我的工作也很有用。

【问题讨论】:

  • 您正在链接的挑战已锁定给那些没有参与 Cody 挑战/在那里没有足够高分数的人。请考虑在此处添加问题。

标签: matlab matrix


【解决方案1】:

有了ndgrid,这很容易。

[x,y] = ndgrid(1:n)
m = x.*y

或者使用bsxfun,这可能是最快的解决方案,因为bsxfun 总是最快的;):

m = bsxfun(@times,1:n,(1:n).')

【讨论】:

  • 我读过bsxfun,但之前从未使用过,当我尝试时我错过了.',所以它只给了我对角线1 4 9 16 25。谢谢!跨度>
【解决方案2】:

如果它是您所追求的最小长度答案,您可能需要考虑:

m = [1:n]'*[1:n];

但我怀疑thewaywewalk 提出的bsxfunndgrid 解决方案在计算时间方面效率更高。

【讨论】:

    【解决方案3】:

    越简单越好;乘以向量:

    m = (1:n)'*(1:n);
    

    最好的,

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      相关资源
      最近更新 更多