假设输入是以下矩阵,
[0,1,0,1;
1,0,1,0]
然后,预期输出为(1,2,1), (1,2,3) (1,4,1), (1,4,3), (2,1,2) (2,1,4), (2,3,2), (2,3,4)
原因是:在第一行中,有四对有序(1,0)对,其索引为(2,1), (2,3), (4,1) and (4,3).
。类似地,在第二行中,有四个有序(1,0)对,其索引为(1,2), (1,4), (3,2) and (3,4).
我现在如何在matlab中逐行编码。
>> a=[ 0,1,0,1; 1,0,1,0]
a =
0 1 0 1
1 0 1 0
>> b=a(1,:);
>> b
b =
0 1 0 1
>> x1=find(b==1)
x1 =
2 4
>> x0=find(b==0)
x0 =
1 3
>> [X,Y]=meshgrid(x1,x0);
>> c=[X(:),Y(:)]
c =
2 1
2 3
4 1
4 3
>> d=[ repmat(1, [4,1]) c ]
d =
1 2 1
1 2 3
1 4 1
1 4 3
使用for循环,可以解决这个问题。我的问题是:你认为你可以在没有for循环的matlab中编码吗?很多时间和关注。
答案 0 :(得分:0)
您可以通过巧妙地使用meshgrid
来完成此操作。
a = [0,1,0,1;1,0,1,0];
[r0, c0] = ind2sub(size(a), find(a == 0)); % row and column of every 0
[r1, c1] = ind2sub(size(a), find(a == 1)); % row and column of every 1
[R0, R1] = meshgrid(r0, r1);
[C0, C1] = meshgrid(c0, c1);
idx = (R0 == R1); % consider only entries whose rows match
list = [R0(idx), C1(idx), C0(idx)]
输出:
list =
1 2 1
1 4 1
2 1 2
2 3 2
1 2 3
1 4 3
2 1 4
2 3 4