【发布时间】:2017-06-20 03:36:35
【问题描述】:
我在 Matlab 中有一个矩阵 A:
A = [176 5406 1 4 7903;
155 5406 1 5 7903;
122 5407 0 4 7903;
140 5407 0 5 7904;
130 5407 0 3 7904];
仅供参考 - 第二列是用户 ID,而第四列是时间。所以5406 是一个用户,5407 是另一个用户。这两个用户都有一些信息存储在我有兴趣访问的第一列和第四列中。
所以基本上我想做的是:
对于每个用户,在第一列中取其值的中值。我已经编写了适用于此的代码(如下)。
如果每个用户在第 5 列中有两个相等的“时间”值,那么我想对第 4 列中的值进行平均。所以对于用户
5406,时间值都是7903,我想要到第 4 列中值的平均值 - 即4和5的平均值最终得到一个值 (4.5)。
但是例如对于下一个用户5407,我将有两个最终值 - 一个是 5 和 3 的平均值(因为 7904 重复),一个是 4(因为 7903 不重复)。
我对如何做到这一点有点困惑,我知道需要有某种if 声明,但我已经坚持了很长时间。有人可以帮忙吗?
谢谢
第一部分的代码:
u=unique(A(:,2));
for i=1:size(u,1)
M=find(A(i,2)==u(i));
med(i)=median(A(M,1));
end
【问题讨论】:
-
我会使用逻辑索引,例如,对于您想做的第一件事,您可以使用:
median(A((A(:,2)==5406),1))对于第一个用户等... -
为了这个问题,我刚刚缩小了矩阵,但我有大约 20,000 个用户,我无法列出每个用户...
-
但您可以循环遍历示例中编写的
u...只需将值 5406 替换为u(i)
标签: matlab for-loop matrix duplicates unique