首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在矩阵中寻找唯一对

在矩阵中寻找唯一对
EN

Stack Overflow用户
提问于 2016-09-20 10:05:51
回答 3查看 263关注 0票数 3

假设我有以下矩阵:

代码语言:javascript
复制
A = [1 1 2 1;1 2 2 1;2 1 3 0;2 2 2 0;3 1 2 1]

其中第一列是索引,后面两列是交互,最后一列是逻辑,表示是或否。因此,我想根据相互作用生成下面的热图。"X“轴表示交互作用,"Y”轴表示索引。

代码语言:javascript
复制
   1-2  1-3  2-2
1   1   NaN   1
2  NaN   0    0
3   1   NaN  NaN

我目前的做法是:

代码语言:javascript
复制
B = sortrows(A,[2,3]);

之后,我分别为每一行和每一列申请“查找”。

是否有一个类似于unique的函数可以同时检查两列?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-20 10:21:25

以下是一种使用unique(...,'rows')的方法

代码语言:javascript
复制
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

这给了我们

代码语言:javascript
复制
B =
     1   NaN     1
   NaN     0     0
     1   NaN   NaN
票数 7
EN

Stack Overflow用户

发布于 2016-09-20 10:14:40

代码语言:javascript
复制
>> 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
     1

C是一组唯一的对。IAC (即C == A(IA, [2, 3]))的对应指标。IC是每一行的对应索引(即A(:, [2, 3]) == C(IC, :))。

票数 2
EN

Stack Overflow用户

发布于 2016-09-20 10:21:25

在@Jeon的answer(Updated):的帮助下,这是一个可能的解决方案。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39591261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档