Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 对矩阵中第一个元素匹配的行求和?_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 对矩阵中第一个元素匹配的行求和?

Arrays 对矩阵中第一个元素匹配的行求和?,arrays,matlab,matrix,Arrays,Matlab,Matrix,我有矩阵: a=[1 2 2 3 1 5 3 4 2 9]; 我想通过将第一列元素匹配的第二列行相加来简化它。因此,上述矩阵a应为: a=[1 7 2 12 3 4]; 我不知道如何在功能上做到这一点,换句话说,没有for循环。谢谢大家! 使用和: 对于单线解决方案,您需要一个外部函数: function subs = unique3rdOutput( vec ) [~,~,subs] = unique(vec) 然后 out = [ unique

我有矩阵:

a=[1 2
   2 3
   1 5
   3 4
   2 9];
我想通过将第一列元素匹配的第二列行相加来简化它。因此,上述矩阵
a
应为:

a=[1 7
   2 12
   3 4];
我不知道如何在功能上做到这一点,换句话说,没有for循环。谢谢大家!

使用和:

对于单线解决方案,您需要一个外部函数:

function subs = unique3rdOutput( vec )
   [~,~,subs] = unique(vec)
然后

out = [ unique(a(:,1)), accumarray(unique3rdOutput(a(:,1)),a(:,2)) ]

如果可以确保第一列中只有正整数,还可以使用:

out = [ unique(a(:,1)) accumarray(a(:,1),a(:,2)) ]
或者正如路易斯·门多所建议的:

out = [ (1:max(a(:,1))).' accumarray(a(:,1),a(:,2)) ]

[…]将第一列元素匹配的第二列行相加。请澄清/重新表述。我的意思是,如果第一列中的元素匹配,我想将行相加。例如,行
[12]
[13]
应该加在一起(因为它们在第一列中都有1个),但是行
[12]
[24]
不应该加在一起(因为第一列中有1个,而另一列有2个…)我认为
15
在您的示例输出中是错误的输出,是吗?非常感谢,编辑完成了。太棒了,在你最后的编辑中效果很好。我想知道,有没有可能直接使
唯一
返回
subs
,这样我就可以在一行上写下整个内容?我这样问只是出于好奇(我意识到这样做效率较低,因为我必须调用
unique
两次,一次生成
u
,一次生成
subs
)因为它可能对我以后的一些应用程序有用。我不知道一个简单的解决方案可以把它放到一行中。@space_voyager如果你的第一列总是包含整数1,2,3,。。。(以任何顺序,但从
1
开始,没有任何间隙)你不需要
unique
,因此你可以有一行
out=[(1:max(a(:,1))。”accumarray(a(:,1),a(:,2))]
@LuisMendo我的第一个答案是:
out=[unique(a(:,1))accumarray(a(:,1)),a(:,2))
-但我编辑了它,因为它只适用于您提到的案例。它不在修订历史中,因为编辑来得很早。非常感谢这些建议!
out = [ (1:max(a(:,1))).' accumarray(a(:,1),a(:,2)) ]