Find indices of non zero elements in matrix in R
Last Updated :
18 Apr, 2023
In this article, we will discuss how to find the indices of non-zero elements in Matrix in R Programming Language.
Method 1: Using for loop
A for loop iteration can be performed over the rows and columns to access the cell values contained in a matrix. Every element is checked for non-zero value, and if satisfies the constraint, the corresponding cell indices are displayed. The time complexity required is equivalent to O(n * m), where n is the number of rows and m is the number of columns.
R
mat <- matrix ( c (-1, 2, 0, 6, 0, 4), nrow = 2)
print ( "Original Matrix" )
print (mat)
print ( "Indices of non-zero elements" )
for (i in 1: nrow (mat)){
for (j in 1: ncol (mat)){
if (mat[i,j]!=0){
cat (i, j, "\n" )
}
}
}
|
Output
[1] "Original Matrix"
[,1] [,2] [,3]
[1,] -1 0 0
[2,] 2 6 4
[1] "Indices of non-zero elements"
1 1
2 1
2 2
2 3
Method 2: Using which() method
which() method is used to return the position or the index of the value which satisfies the given constraints. It applies the condition over each element of the specified R object, vector or data frame or matrix, and then returns the corresponding cell positions of the satisfied values. Missing values or NA are treated as FALSE in this method.
Syntax: which( cond, arr.ind = FALSE)
Arguments :
cond – can be a logical vector or an array.
arr.ind – logical; indicator of whether the array indexes should be returned.
In case, the arr.ind parameter is set to FALSE, the cell values are returned and not indices. The returned indices are displayed in the form of a table, with row and col as the headings of the respective columns.
R
mat <- matrix ( c (-1, 2, 0, 6, 0, 4), nrow = 2)
print ( "Original Matrix" )
print (mat)
print ( "Indices of non-zero elements" )
which (mat != 0, arr.ind = T)
|
Output:
[1] "Original Matrix"
[,1] [,2] [,3]
[1,] -1 0 0
[2,] 2 6 4
[1] "Indices of non-zero elements"
row col
[1,] 1 1
[2,] 2 1
[3,] 2 2
[4,] 2 3
The method works in the case of character arrays or matrices as well. In this case, the entire matrix cells’ positions are returned as output.
R
mat <- matrix ( letters [1:8], nrow = 2)
print ( "Original Matrix" )
print (mat)
print ( "Indices of non-zero elements" )
which (mat != 0, arr.ind = T)
|
Output
[1] "Original Matrix"
[,1] [,2] [,3] [,4]
[1,] "a" "c" "e" "g"
[2,] "b" "d" "f" "h"
[1] "Indices of non-zero elements"
row col
[1,] 1 1
[2,] 2 1
[3,] 1 2
[4,] 2 2
[5,] 1 3
[6,] 2 3
[7,] 1 4
[8,] 2 4
Share your thoughts in the comments
Please Login to comment...