假设我有以下矩阵:
A = [1 1 2 1;1 2 2 1;2 1 3 0;2 2 2 0;3 1 2 1]其中第一列是索引,后面两列是交互,最后一列是逻辑,表示是或否。因此,我想根据相互作用生成下面的热图。"X“轴表示交互作用,"Y”轴表示索引。
1-2 1-3 2-2
1 1 NaN 1
2 NaN 0 0
3 1 NaN NaN我目前的做法是:
B = sortrows(A,[2,3]);之后,我分别为每一行和每一列申请“查找”。
是否有一个类似于unique的函数可以同时检查两列?
发布于 2016-09-20 10:21:25
以下是一种使用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这给了我们
B =
1 NaN 1
NaN 0 0
1 NaN NaN发布于 2016-09-20 10:14:40
>> A
A =
1 1 2 1
1 2 2 1
2 1 3 0
2 2 2 0
3 1 2 1
>> [C, IA, IC] = unique(A(:, [2, 3]), 'rows')
C =
1 2
1 3
2 2
IA =
1
3
2
IC =
1
3
2
3
1C是一组唯一的对。IA是C (即C == A(IA, [2, 3]))的对应指标。IC是每一行的对应索引(即A(:, [2, 3]) == C(IC, :))。
发布于 2016-09-20 10:21:25
在@Jeon的answer(Updated):的帮助下,这是一个可能的解决方案。
A = [1 1 2 1;1 2 2 1;2 1 3 0;2 2 2 0;3 1 2 1]
[~,IA,idx] = unique(A(:, [2, 3]), 'rows');
r = max(A(:,1));
c = numel(IA);
out= NaN(r,c );
out(sub2ind([r ,c], A(:,1),idx)) = A(:,4)https://stackoverflow.com/questions/39591261
复制相似问题