在MATLAB中将整数转换为逻辑数组

时间:2016-01-31 15:46:46

标签: arrays matlab indexing

我想将整数i转换为具有第i个非零元素的逻辑向量。这可以通过1:10 == 2完成,返回

0     1     0     0     0     0     0     0     0     0

现在,我想为每一行向量化这个过程。写repmat(1:10, 2, 1) == [2 5]'我希望得到

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

但相反,会发生此错误:

  

使用==
时出错   矩阵维度必须一致。

我可以对此过程进行矢量化,还是for循环唯一选项?

3 个答案:

答案 0 :(得分:9)

您可以使用bsxfun

>> bsxfun(@eq, 1:10, [2 5].')
ans =

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

注意第二个向量上的转置.';这很重要。

答案 1 :(得分:4)

另一种方法是使用eye并创建一个n x n长的逻辑矩阵,然后使用索引来索引此矩阵的行:

n = 10;
ind = [2 5];

E = eye(n,n) == 1;
out = E(ind, :);

我们得到:

>> out

out =

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

答案 2 :(得分:2)

使用索引的另一种可能性:

application.properties