在矩阵中查找唯一对

C.C*_*den 3 arrays matlab unique matrix find

我们假设我有以下矩阵:

A = [1 1 2 1;1 2 2 1;2 1 3 0;2 2 2 0;3 1 2 1]
Run Code Online (Sandbox Code Playgroud)

第一列是索引而下两个是交互,最后一个是逻辑,表示是或否.所以我知道我想根据相互作用生成以下热图."X"轴表示相互作用,"Y"轴表示指数.

   1-2  1-3  2-2
1   1   NaN   1
2  NaN   0    0
3   1   NaN  NaN
Run Code Online (Sandbox Code Playgroud)

我目前的做法:

B = sortrows(A,[2,3]);
Run Code Online (Sandbox Code Playgroud)

然后我分别为每行和每列应用find.

是否有类似的功能unique可以同时检查两列?

Lui*_*ndo 7

这是一种方式,使用unique(...,'rows'):

A = [1 1 2 1; 1 2 2 1; 2 1 3 0; 2 2 2 0; 3 1 2 1]; % data
[~, ~, jj] = unique(A(:,[2 3]),'rows'); % get interaction identifiers
B = accumarray([A(:,1) jj], A(:,4), [], @sum, NaN); % build result, with NaN as fill value
Run Code Online (Sandbox Code Playgroud)

这给了

B =
     1   NaN     1
   NaN     0     0
     1   NaN   NaN
Run Code Online (Sandbox Code Playgroud)