R语言 查找矩阵中非零元素的指数
在这篇文章中,我们将讨论如何在R编程语言中找到矩阵中非零元素的索引。
方法1:使用for循环
可以在行和列上进行for循环迭代,以访问矩阵中包含的单元值。每个元素都被检查是否为非零值,如果满足约束条件,则显示相应的单元格索引。所需的时间复杂度相当于O(n * m),其中n是行的数量,m是列的数量。
# declaring a matrix in R
mat <- matrix(c(-1, 2, 0, 6, 0, 4), nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
# computing indexes of non
# zero elements looping through
# rows
for (i in 1:nrow(mat)){
# looping through columns
for(j in 1:ncol(mat)){
# check if element is non
# zero
if(mat[i,j]!=0){
# display the row and column
# index
cat(i, j,"\n")
}
}
}
输出
[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
方法2:使用which()方法
which()方法用于返回满足给定约束条件的值的位置或索引。它将条件应用于指定的R对象、向量或数据框或矩阵的每个元素,然后返回满足条件的值的相应单元格位置。在此方法中,缺失的值或NA被视为FALSE。
语法: which( cond, arr.ind = FALSE)
参数:
cond – 可以是一个逻辑向量或一个数组。
arr.ind – 逻辑;指示是否应该返回数组的索引。
如果arr.ind参数设置为FALSE,则返回单元格值而不是索引。返回的索引以表格的形式显示,row和col是各列的标题。
# declaring a matrix in R
mat <- matrix(c(-1, 2, 0, 6, 0, 4), nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
# computing indexes of non zero
# elements
which(mat != 0, arr.ind = T)
输出
[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
该方法也适用于字符数组或矩阵的情况。在这种情况下,整个矩阵单元格的位置将作为输出返回。
# declaring a matrix in R
mat <- matrix(letters[1:8], nrow = 2)
print ("Original Matrix")
print (mat)
print ("Indices of non-zero elements")
# computing indexes of non zero
# elements
which(mat != 0, arr.ind = T)
输出
[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