gpt4 book ai didi

matlab - 查找矩阵的第一个非零列(矢量化版本)

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:33 25 4
gpt4 key购买 nike

我在问自己,用于查找矩阵第一个非零列的值的最“矢量化”解决方案是什么样的。如果存在矢量化解决方案但非常丑陋/骇人听闻,我也要求最优雅的解决方案。

假设我们有一个矩阵M,我们可以假设它至少包含一个非零值:

 M =
0 0 1 0 0
0 0 2 0 0
0 0 3 0 42
0 0 4 0 0
0 0 0 0 0

我想在第一列中找到不全为零的值;所以对于这个例子,期望的输出是:

 column = 
1
2
3
4
0

我的第一次尝试使用了 for 循环并且工作正常,但它可能没有充分利用 matlab 中可用的工具。

>> for i = 1:size(M,2)
col = M(:,i);
if find(col) % empty array evaluates to false
break;
end
end
>> col
col =
1
2
3
4
0

我想出的另一个解决方案是使用嵌套的 findcellfun 调用,但它可能仍然不是解决问题的最佳方法。

>> C = find(cellfun(@isempty, cellfun(@find, num2cell(M,1), 'UniformOutput', 0)) == 0)
C =
3 5
>> M(:,C(1))
ans =
1
2
3
4
0

最佳答案

这是一种方法,我会把它留给你来衡量它带来的性能改进(如果你当然感兴趣的话)-

M(:,find(any(M),1))

我建议调查 Logical Operation in MATLAB 逻辑索引,因为它们对于索引目的非常有用。这些应该能很好地为您服务。

关于matlab - 查找矩阵的第一个非零列(矢量化版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com