matlab - 根据多列对矩阵的行进行分组

标签 matlab matrix

我有一个矩阵 A,其中包含第一列 user_id、第二列 year、第三列 month,第四列

 A=[0 2010 10 19; 
    0 2010 10 19; 
    0 2010 10 18; 
    0 2010 10 18; 
    0 2010 10 17; 
    0 2010 10 17; 
    0 2010 9 20; 
    0 2010 9 19; 
    0 2010 9 19; 
    0 2010 9 19]

我想根据月份和日期划分这些数据。我怎样才能在 MATLAB 中做到这一点?

最佳答案

您可以使用 unique 按月和日(第 3 列和第 4 列)对每行进行分组,然后使用 splitapply对共享月/日的每组行执行操作。我们要执行的操作只是将它们放入元胞数组中:@(x){x}。下面的代码可以完成这个任务。

% Assign each unique month/day combination an ID
[~, ~, inds] = unique(A(:,[3 4]), 'rows');

% Divide up the rows based upon this ID
groups = splitapply(@(x){x}, A, inds);

以及celldisp(groups)的结果

groups{1} =
           0        2010           9          19
           0        2010           9          19
           0        2010           9          19
groups{2} =
           0        2010           9          20
groups{3} =
           0        2010          10          17
           0        2010          10          17
groups{4} =
           0        2010          10          18
           0        2010          10          18
groups{5} =
           0        2010          10          19
           0        2010          10          19

话虽这么说,您可以在不实际将数据拆分为不同部分的情况下进行分析。由于 MATLAB 针对矩阵运算进行了优化,这可能会提高性能。

有关 splitapply 和数据分组的更多信息 here

关于matlab - 根据多列对矩阵的行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793010/

相关文章:

c - 由 MATLAB MEX 函数中的 "optimised out"值引起的 GCC 段错误

python - 安装 pymatbridge

matlab - 如何在 MATLAB 调试中跳过内置函数?

oop - 对象上的测试方法存在

algorithm - Scala中nxm和mxp矩阵的乘法算法

C 矩阵结构

matrix - 为什么简单的矩阵乘法会在 Julia 中占用如此多的垃圾收集器时间?

matlab - 小矩阵乘以大矩阵

R:在 0 和 1 的矩阵中查找包含最多 1 的列集

c++ - opencv矩阵多 channel 获取和填充