Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 快速,向量化方式将二进制矩阵转换为最后一个非零索引的向量

假设在MATLAB中,我有一个矩阵A,其元素为0或1。

如何以更快的矢量化方式获取每列最后一个非零元素的索引的向量?

我可以做

[B, I] = max(cumsum(A));

并使用I ,但是有更快的方法吗? (我假设即使将0和1加起来也将花费一些时间)。

编辑:我想我向量化的速度远远超过了我所需要的速度-Fooz先生的循环很棒,但即使快速,MATLAB中的每个循环似乎也花费了很多调试时间。


回答:
Fooz先生所示 ,使用新版本的MATLAB,for循环现在可以很快。但是,如果您真的想拥有紧凑的矢量化代码,建议您尝试以下操作:

[B,I] = max(flipud(A)); I = size(A,1)-I+1; 这比基于CUMSUM的答案要快,但仍然不如Fooz先生的循环选项快。

需要考虑的另外两件事:
  • 对于完全没有列的列,您想要获得什么结果?通过以上给出的选项,我相信在这种情况下,您将获得size(A,1)的索引(即A中的行数)。作为您的选择,我相信您会在这种情况下获得1,而Fooz先生的“嵌套循环”选项将为您提供0。
  • 这些不同选项的相对速度可能会根据A的大小和期望的非零数目而有所不同。

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:50


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.