Arrays MATLAB中整数到逻辑数组的转换

Arrays MATLAB中整数到逻辑数组的转换,arrays,matlab,indexing,Arrays,Matlab,Indexing,我想把一个整数I转换成第I个非零元素的逻辑向量。这可以通过1:10==2完成,返回 0 1 0 0 0 0 0 0 0 0 现在,我想为每一行向量化这个过程。写复述书1:10,2,1==[25]“我希望 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

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

0     1     0     0     0     0     0     0     0     0
现在,我想为每一行向量化这个过程。写复述书1:10,2,1==[25]“我希望

0     1     0     0     0     0     0     0     0     0
0     0     0     0     1     0     0     0     0     0
但是,会出现以下错误:

使用==时出错 矩阵尺寸必须一致

我可以将此过程矢量化吗,或者for循环是唯一的选项吗?

您可以使用bsxfun:

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

另一种方法是使用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

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

n = 10;
ind = [2 5];
x=zeros(numel(ind),n);
x(sub2ind([numel(ind),n],1:numel(ind),ind))=1;

精神论者徽章+1@我一直在和我的绝地力量训练师一起训练。对于使用八度音阶的人来说,只需写1:10==[2 5]。@ederag非常正确,我实际上在八度音阶上生成了上面的示例。但我不想把事情搞混,因为这个问题只标记为MATLAB而不是Octave。@johnny5不是,但它的格式非常不正确,不清楚。下面由比克给出的答案阐明了OP想要什么,它甚至是一个主题。一般来说,要注意不要期望1和0被视为合乎逻辑的。考虑:>>foo=1:10;>>foo[1,0,1,0,1,0,1,1,0]下标索引必须是实正整数或逻辑数。>>愚蠢的[1,0,1,0,1,0,1,1,0]ans=1 3 5 7 9
n = 10;
ind = [2 5];
x=zeros(numel(ind),n);
x(sub2ind([numel(ind),n],1:numel(ind),ind))=1;