Checking if minimum of a matrix occurs on the diagonal

3 次查看(过去 30 天)
For a matrix, I would like to check if the minimum value of each row is found on the diagonal. The minimum value can occur more than once within a row. Since the min command returns the index of the first occurrence of the minimum, min can miss later occurrences on the diagonal, as follows:
testMatrix = [ 1 3 5 1
2 0 4 6
3 9 2 7
-2 9 4 -2];
[~, iMin] = min(a)
iMin =
4 2 3 4
How can I check if the row minimum is found on the diagonal? I am working with a very large matrix in reality, so I would like to avoid looping down the rows.
  2 个评论
Adam
Adam 2018-10-4
编辑:Adam 2018-10-4
Can you not do something like
diag( testMatrix ) == min( testMatrix )
?
I haven't put a whole lot of thought into it so there may be perfectly good reasons why you can't!
KAE
KAE 2018-10-4
This does not seem to check the diagonals, or maybe I am misunderstanding,
ans =
4×4 logical array
0 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1

请先登录,再进行评论。

采纳的回答

Julian Hapke
Julian Hapke 2018-10-4
with a slight modification of Adams comment:
diag(testMatrix) == min(testMatrix , [], 2)
min accepts the dimension in which you want the minimum, in this case you want the minimum of each row, so in direction 2 and check against the diagonal of the matrix
  1 个评论
KAE
KAE 2018-10-4
编辑:KAE 2018-10-4
Works and returns a vector saying whether it is on the diagonal or not, which I realized is what I was looking for when I saw the output. Thanks!
Here it shows it returns zero for rows when the minimum is not on the diagonal.
testMatrixOneWrong = ...
[ 1 3 5 -2
2 0 4 6
3 9 2 7
-2 9 4 -2]
diag(testMatrixOneWrong) == min(testMatrixOneWrong, [], 2)
ans =
4×1 logical array
0
1
1
1

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by