【问题标题】:MxN matrix with ones and zeros following a specific ruleMxN 矩阵,具有遵循特定规则的 1 和 0
【发布时间】:2016-11-05 12:26:52
【问题描述】:

我想创建一个如下所示的MxN矩阵:

[1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0;
 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0;
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0;
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1]

我有窗口大小,比如说 5,每行移动 3 个。是否可以在不使用for 循环的情况下创建这样的矩阵?或者有什么最佳方法吗?

【问题讨论】:

  • 对于较大的 M 和 N,创建这样的矩阵需要很长时间。
  • 创建一个零矩阵并在 for 循环中更改其 5 个元素。这不能太慢。

标签: matlab matrix


【解决方案1】:

这是一个单行解决方案:

reshape([reshape([ones(5,6);zeros(21,6)], 1,[]), ones(1,5)],[],7).'

注意:

所需的矩阵可以看作是[6, 5+21]矩阵的串联:

1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

还有一个[1 ,5] 矩阵:

1 1 1 1 1

重塑为[7 , 23] 矩阵。

使用repelem + bsxfun + accumarray 的其他解决方案:

r = repelem (1:7,5);
c= bsxfun(@plus, ((1:5)-3).',3*(1:7));
out = accumarray([r(:) c(:)] ,1)

可以生成1s的行和列的索引,accumarray可以用来创建所需的矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 2011-04-17
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多