Matlab 按第一列索引对不同行中的值进行分组

Matlab 按第一列索引对不同行中的值进行分组,matlab,csv,matrix,Matlab,Csv,Matrix,这是一个问题的产物 如果 第1列|第2列|第3列 然后跑 [U ix iu] = unique(A(:,1) ); r= accumarray( iu, A(:,2:3), [], @(x) {x'} ) 请告诉我错误 Error using accumarray Second input VAL must be a vector with one element for each row in SUBS, or a scalar. 我想做些什么 第

这是一个问题的产物

如果

第1列|第2列|第3列 然后跑

    [U ix iu] = unique(A(:,1) ); 
    r= accumarray( iu, A(:,2:3), [], @(x) {x'} )
请告诉我错误

    Error using accumarray
    Second input VAL must be a vector with one element for each row in SUBS, or a
    scalar.
我想做些什么

第一栏|第二栏|第三栏|第四栏|第五栏|第六栏|第七栏 我知道如何使用for和if来实现这一点,但这在大数据上花费了太多时间

我该怎么做


提前谢谢你

您在针对上一个问题提供的解决方案中误用了
accumarray
。第一个参数
iu
是指数向量,第二个参数应该是相同长度的值向量。您在这里所做的是指定一个矩阵作为第二个参数,它的值实际上是
iu
中索引的两倍

要使其正常工作,您需要为第二列和第三列创建一个索引向量(它们是相同的索引,不是巧合!),并指定一个匹配的值列向量,如下所示:

[U, ix, iu] = unique(A(:,1));
vals = reshape(A(:, 2:end).', [], 1);                    %'// Columnize values
subs = reshape(iu(:, ones(size(A, 2) - 1, 1)).', [], 1); %'// Replicate indices
r = accumarray(subs, vals, [], @(x){x'});

此解决方案适用于要传递到
accumarray

的任意数量的列。您的解决方案很棒!多谢各位@是的,我对你的答案投了赞成票。当我收到信息“除非你的声望达到15,否则你不能投票”后,我没有点击向上按钮,但现在我可以投票了,因为我的声望超过了15。谢谢你提醒我:)@Eitan\T我注意到我想要的和你的代码之间存在差异。我试过了,但没能得到我写的输出表。你的代码似乎给了我一列一列的重新排列。但我的目的是一排一排地重新排列。我尝试了一些改变,但失败了。也许我得多学几门。你能给我一个简单的解决办法吗?@Eitan\T我得到的是r{1}=344122233234,r{2}=12321239945,r{3}=57224,所以顺序不同。@Eitan\T很抱歉回复晚了。你的解决方案有效!非常感谢。
    Error using accumarray
    Second input VAL must be a vector with one element for each row in SUBS, or a
    scalar.
2         3        234       44        33        12        22
3         123      99        1232      45
5         224      57
[U, ix, iu] = unique(A(:,1));
vals = reshape(A(:, 2:end).', [], 1);                    %'// Columnize values
subs = reshape(iu(:, ones(size(A, 2) - 1, 1)).', [], 1); %'// Replicate indices
r = accumarray(subs, vals, [], @(x){x'});