Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database R-将矩阵中的每个值除以其行/列的最大值_Database_R_Matrix_Rows - Fatal编程技术网

Database R-将矩阵中的每个值除以其行/列的最大值

Database R-将矩阵中的每个值除以其行/列的最大值,database,r,matrix,rows,Database,R,Matrix,Rows,我试图通过将每个值除以其列或行名称的最大值中的较小值来转换矩阵中的值。我遇到了麻烦,因为我不知道如何从更大的函数中查询行/列中的特定值 一小部分数据如下所示:加权(对称)邻接矩阵mat: Acousmatic Acoustic Afro-beat Alternative Ambient Acousmatic 125 11 3 3 1 Acoustic 11 1

我试图通过将每个值除以其列或行名称的最大值中的较小值来转换矩阵中的值。我遇到了麻烦,因为我不知道如何从更大的函数中查询行/列中的特定值

一小部分数据如下所示:加权(对称)邻接矩阵mat:

              Acousmatic Acoustic Afro-beat Alternative Ambient
  Acousmatic         125       11         3           3       1
  Acoustic            11   112398      1810       24216    3824
  Afro-beat            3     1810     10386        1220     298
  Alternative          3    24216      1220      103286    2838
  Ambient              1     3824       298        2838   20400
作为一个例子,我想转换“Alternative Acoustic”(24216)的值,方法是找到由其对角线(112398)给出的“Acoustic”的最大值和由其对角线(103286)给出的“Alternative”的最大值,并将“Alternative Acoustic”(24216)除以这两个数字中的较小者。在本例中,较小的是“Alternative”,所以我想用24216/103286=~.2345转换“Alternative Acoustic”值

我想对该矩阵中的所有值自动执行此转换,这将生成一个值范围为0-1的矩阵,对角线为所有1

我在许多不同的迭代中使用“mat”作为矩阵和数据帧尝试了以下内容,但我不知道如何正确查询矩阵中每个值的行和列最大值。这是使用不存在的函数(“colmax”和“rowmax”),但我认为它最清楚地表达了我想要做的事情:

transformedmat尝试以下方法:

A1 = mat/apply(mat,1,max)
A2 = t(t(mat)/apply(mat,2,max))
result = ifelse(A1>A2,A1,A2)

除非我遗漏了什么,否则这种方法看起来也是有效的:

res = diag(mat)
#names(res) = colnames(mat)       
mat / outer(res, res, pmin) 

#            Acousmatic  Acoustic  Afro.beat Alternative    Ambient
#Acousmatic       1.000 0.0880000 0.02400000   0.0240000 0.00800000
#Acoustic         0.088 1.0000000 0.17427306   0.2344558 0.18745098
#Afro-beat        0.024 0.1742731 1.00000000   0.1174658 0.02869247
#Alternative      0.024 0.2344558 0.11746582   1.0000000 0.13911765
#Ambient          0.008 0.1874510 0.02869247   0.1391176 1.00000000
其中
mat
为:

mat = structure(c(125L, 11L, 3L, 3L, 1L, 11L, 112398L, 1810L, 24216L, 
3824L, 3L, 1810L, 10386L, 1220L, 298L, 3L, 24216L, 1220L, 103286L, 
2838L, 1L, 3824L, 298L, 2838L, 20400L), .Dim = c(5L, 5L), .Dimnames = list(
    c("Acousmatic", "Acoustic", "Afro-beat", "Alternative", "Ambient"
    ), c("Acousmatic", "Acoustic", "Afro.beat", "Alternative", 
    "Ambient")))
请尝试以下代码:

maxcol <- Rfast::colMaxs(x)
maxrow <- Rfast::rowMaxs(x)
Rfast::eachrow(x, min(maxcol, maxrow), oper = "/")

maxcol Ah,将其拆分为两个更简单的运算/矩阵,然后取其中较大的值。好多了。明亮的非常感谢!最后一步可以是
pmax(A1,A2)
。您应该记住,尝试中使用的表达式min(colmax,rowmax)是一个数字。您真正想要的是一个条目式最小化,它可以通过ifelse构造实现
maxcol <- Rfast::colMaxs(x)
maxrow <- Rfast::rowMaxs(x)
Rfast::eachrow(x, min(maxcol, maxrow), oper = "/")