假设我有一些具有非负条目的矩阵,N个矩阵例如具有相等大小的MxM。例如,我有3个矩阵如下:
A1=[2, 2, 0;
2, 2, 0;
0, 2, 0];
A2=[4, 0, 4;
4, 3, 0;
0, 0, 1];
A3=[2, 0, 0;
1, 0, 3;
3, 4, 3];
我想在matlab中找到A1,A2和A3的交集。这意味着我想得到以下矩阵:
B=[-1, 2, 4;
-1, -1, 3;
3, -1, -1];
如果N个矩阵的(i,j)元素的交集,即元素A1(i,j),A2(i,j),A3(i,j),最多是一个非零数然后B(i,j)等于那个数字。否则,如果交集是至少两个数字,我输出-1,如我在前面的例子中所示。
如何在没有循环的matlab中执行此操作?
答案 0 :(得分:3)
首先,连接到单个3D矩阵:
A=cat(3,A1,A2,A3)
然后计算非零元素,它给出了-1
- 元素的位置:
L=(sum(A~=0,3)>1)
最后,在那里L = 1我们想要一个-1,否则我们想要那个位置的单个元素,这是总和,因为其他元素是零:
L*-1+(1-L).*sum(A,3)
答案 1 :(得分:2)
我会这样做:
首先,计算所有矩阵中每个位置的非零元素:
foo = (A1 ~= 0) + (A2 ~= 0) + (A3 ~= 0);
接下来,找到那些具有多个非零元素的元素,并在结果中将它们设置为-1:
B = zeros(3,3);
B(foo > 1) = -1;
最后,找到非零元素(因为在我们关心的元素中只有一个非零元素,这与矩阵之和相同)
sumA = A1 + A2 + A3;
并将它们添加到结果矩阵
中B(foo == 1) = sumA(foo == 1);