【问题标题】:MATLAB Generate matrix with logical values according to vectorMATLAB根据向量生成具有逻辑值的矩阵
【发布时间】:2017-08-06 06:51:00
【问题描述】:

我有一个充满整数的垂直 Nx1 矩阵 A。

A:
+---+
| 4 |
| 3 |
| 1 |
| . |
+---+

我的目标是创建一个 NxM 矩阵 B,如果每个单元格的行小于或等于 A 中的相应数字,则每个单元格的值为 1,其余为 0。

B:
+-------------+
| 1 1 1 1 0 . |
| 1 1 1 0 0 . |
| 1 0 0 0 0 . |
| . . . . . . |
+-------------+

这可以通过逐行迭代来实现,但我正在尝试找到一种更快的方法。我觉得这可以通过逻辑索引来完成,但我想不出如何完全摆脱我的头脑。

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以输入:

    B = A>=1:size(A,1)
    % or, in versions earlier than 2016b:
    B = bsxfun(@ge,A,1:size(A,1))
    

    这将compare each value in A1A 长度之间的所有数字,如果它大于或等于(@ge...) 则返回1,并且0 如果没有。结果是一个矩阵,其中每一行 k 是值A(k)1A 长度之间的所有值的比较。

    【讨论】:

    • 这似乎对我不起作用。 Size(A,1) 将给出 N,即 A 向量的高度。 1:size(A,1) 将给出一个水平向量 1,2,...N。当我执行 A>=1:size(A,1) 时,MATLAB 错误提示矩阵尺寸必须一致。我了解您试图通过比较垂直向量和水平向量来获取矩阵,但语法似乎不起作用。
    【解决方案2】:

    为我的问题找到了解决方案。

        index = repmat(1:max(A),length(A),1);
        B = ones(length(A),max(A));
        B(index>repmat(A,1,max(A))) = 0;
    

    index 是一个 NxM 矩阵,其中单元格的值等于其列号。只要该值大于 A 中的值,B 中的相应单元格就会设置为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多