Matlab 按第一列索引对不同行中的值进行分组
这是一个问题的产物 如果 第1列|第2列|第3列 然后跑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. 我想做些什么 第
[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'});