我有一个垂直的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 . |
| . . . . . . |
+-------------+
这可以通过逐行迭代来实现,但我试图找到一种更快的方法。我觉得这可以通过逻辑索引完成,但不能想到如何完全脱离我的头脑。
答案 0 :(得分:2)
您可以输入:
B = A>=1:size(A,1)
% or, in versions earlier than 2016b:
B = bsxfun(@ge,A,1:size(A,1))
A
1
A
与1
之间的所有数字compare each value 0
,如果它更大或等于(A(k)
,则返回1
{3}} ...),如果没有A
。结果是一个矩阵,其中每行 k 是值require
的比较,其中所有值都在return
到true
之间。
答案 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。