如何在MATLAB中对矩阵的每一行/列应用函数?

113

你可以通过例如 v + 1 的方式对向量中的每个元素应用一个函数,或者使用函数 arrayfun。那么在不使用 for 循环的情况下,如何对矩阵的每一行/列执行相同的操作呢?

12个回答

-2
在寻找如何计算矩阵行和时,偶然发现了这个问题/答案。
我想补充一下,Matlab的SUM函数实际上支持按给定维度求和,即标准的二维矩阵。
因此,要计算列和,请执行以下操作:
colsum = sum(M) % or sum(M, 1)

对于行总和,只需执行以下操作

rowsum = sum(M, 2)

我敢打赌这比编写for循环和转换为单元格更快 :)

所有这些都可以在Matlab的SUM帮助文档中找到。


7
原回答的第一句提到了沿给定维度应用SUM的能力。然后回答进一步讨论了在函数内没有已经构建好的选择维度的情况。但你说得对,当内置的选择维度选项可用时,使用它们几乎总是比使用for循环或转换为单元格更快。 - cjh
确实如此,然而,上面的答案让我回到了Matlab文档,因为我不需要那么多花哨的东西,所以我只是想分享并帮助其他人,需要简单解决方案的人,免去搜索的麻烦。 - nover

-3
如果你知道行的长度,你可以做出类似这样的东西:
a=rand(9,3);
b=rand(9,3); 
arrayfun(@(x1,x2,y1,y2,z1,z2) line([x1,x2],[y1,y2],[z1,z2]) , a(:,1),b(:,1),a(:,2),b(:,2),a(:,3),b(:,3) )

3
看到这个答案的任何人:这不是正确的方法!在MATLAB中,这也不是做任何事情的方式! - Stewie Griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接