我想将整数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
循环唯一选项?
答案 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