MATLAB根据向量生成具有逻辑值的矩阵

时间:2017-08-05 22:14:03

标签: matlab matrix

我有一个垂直的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 . |
| . . . . . . |
+-------------+

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

2 个答案:

答案 0 :(得分:2)

您可以输入:

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

A 1 A1之间的所有数字compare each value 0,如果它更大或等于(A(k),则返回1 {3}} ...),如果没有A。结果是一个矩阵,其中每行 k 是值require的比较,其中所有值都在returntrue之间。

答案 1 :(得分:1)

找到解决我问题的方法。

    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。