命令A(~A)在matlab中真正做了什么

mwo*_*oua 6 matlab

我一直在寻找找到矩阵非零最小值的最有效方法,并在论坛上找到了:

让数据成为矩阵A.

A(~A) = nan;
minNonZero = min(A);
Run Code Online (Sandbox Code Playgroud)

这是非常简短和有效的(至少在代码行数量上),但我不明白当我们这样做时会发生什么.我找不到关于这个的任何文件,因为它不是一个operation像矩阵+,-,\,...会.

任何人都可以解释我或给我一个链接或什么可以帮助我理解做了什么?谢谢 !

Dan*_*Dan 9

它使用逻辑索引

~在Matlab中是非运算符.在双数组上使用时,它会查找所有等于零的元素.例如:

~[0 3 4 0]
Run Code Online (Sandbox Code Playgroud)

结果在逻辑矩阵中

[1 0 0 1]
Run Code Online (Sandbox Code Playgroud)

即它是一种快速找到所有零元素的方法

所以if A= [0 3 4 0]then ~A= [1 0 0 1]so now A(~A)= A([1 0 0 1]).A([1 0 0 1])使用逻辑索引仅影响true的元素,因此在本例中为元素1和元素4.

最后A(~A) = NaN将取代所有在A中是相等的元素0NaNmin忽略,从而找到最小的非零元素.