![]() |
快速,向量化方式将二进制矩阵转换为最后一个非零索引的向量
假设在MATLAB中,我有一个矩阵A,其元素为0或1。
如何以更快的矢量化方式获取每列最后一个非零元素的索引的向量? 我可以做 [B, I] = max(cumsum(A)); 并使用I ,但是有更快的方法吗? (我假设即使将0和1加起来也将花费一些时间)。 [B]编辑:[/B]我想我向量化的速度远远超过了我所需要的速度-Fooz先生的循环很棒,但即使快速,MATLAB中的每个循环似乎也花费了[I]我[/I]很多调试时间。 回答: 如[URL="https://stackoverflow.com/questions/831721/turning-a-matlab-binary-matrix-into-a-vector-of-the-last-nonzero-index-in-a-fast/831964#831964"]Fooz先生所示[/URL] ,使用新版本的MATLAB,for循环现在可以很快。但是,如果您真的想拥有紧凑的矢量化代码,建议您尝试以下操作: [B,I] = max(flipud(A)); I = size(A,1)-I+1; 这比基于CUMSUM的答案要快,但仍然不如Fooz先生的循环选项快。 需要考虑的另外两件事: [LIST][*]对于完全没有列的列,您想要获得什么结果?通过以上给出的选项,我相信在这种情况下,您将获得[B]size(A,1)[/B]的索引(即[B]A中[/B]的行数)。作为您的选择,我相信您会在这种情况下获得1,而Fooz先生的“嵌套循环”选项将为您提供0。 [*]这些不同选项的相对速度可能会根据[B]A[/B]的大小和期望的非零数目而有所不同。 [/LIST] [url=https://stackoverflow.com/questions/831721]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:27。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.