如果
A = [2 3 234 ; 2 44 33; 2 12 22; 3 123 99; 3 1232 45; 5 224 57]
2 3 234
2 44 33
2 12 22
3 123 99
3 1232 45
5 224 57
然后运行
[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.
我想制作
2 3 234 44 33 12 22
3 123 99 1232 45
5 224 57
我知道如何使用for和if,但是花费太多时间来处理大数据。
我该怎么做?
提前谢谢!
答案 0 :(得分:2)
您在提供给上一个问题的解决方案中误导了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
的任意数量的列。