繁体   English   中英

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

[英]MATLAB Generate matrix with logical values according to vector

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

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

你可以输入:

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

这会将A 每个值1A长度之间的所有数字进行比较 ,如果它的大于或等于( @ge ...)则返回1否则返回0 结果是一个矩阵,其中每一行k是值A(k)的比较,所有值都在1A的长度之间。

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

    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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM