Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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
R 将两个邻接矩阵按元素相乘,一个比另一个大_R_Matrix - Fatal编程技术网

R 将两个邻接矩阵按元素相乘,一个比另一个大

R 将两个邻接矩阵按元素相乘,一个比另一个大,r,matrix,R,Matrix,我在研究两个正方形邻接矩阵。一个比另一个小,但小的是大的一个子集 我不确定这是不是crossprod、矩阵乘法之类的工作。我需要只做一个较大矩阵的子集,然后再相乘吗 有没有更简单的方法说“嘿,看看小表中的这些列/行名称,在大表中乘以它们对应的列/行名称?” m1您必须使用较小矩阵的行名和列名对较大矩阵进行子集划分。类似下面的内容 mult <- function(large, small){ rn <- rownames(small) cn <- colname

我在研究两个正方形邻接矩阵。一个比另一个小,但小的是大的一个子集

我不确定这是不是crossprod、矩阵乘法之类的工作。我需要只做一个较大矩阵的子集,然后再相乘吗

有没有更简单的方法说“嘿,看看小表中的这些列/行名称,在大表中乘以它们对应的列/行名称?”


m1您必须使用较小矩阵的行名和列名对较大矩阵进行子集划分。类似下面的内容

mult <- function(large, small){
    rn <- rownames(small)
    cn <- colnames(small)
    large[rn, cn] <- large[rn, cn]*small
    large
}

mult(m1, m2)
#  A B C D E
#A 5 1 8 2 1
#B 1 1 1 1 1
#C 6 1 9 3 1
#D 4 1 7 1 1
#E 1 1 1 1 1
如果要多次进行
large
small
的转换,请定义函数:

f <- function(m) (m + 3)^2
g <- function(m) log(m + 1)

mult(f(m1), g(m2))

f您必须使用较小矩阵的行名和列名对较大矩阵进行子集划分。类似下面的内容

mult <- function(large, small){
    rn <- rownames(small)
    cn <- colnames(small)
    large[rn, cn] <- large[rn, cn]*small
    large
}

mult(m1, m2)
#  A B C D E
#A 5 1 8 2 1
#B 1 1 1 1 1
#C 6 1 9 3 1
#D 4 1 7 1 1
#E 1 1 1 1 1
如果要多次进行
large
small
的转换,请定义函数:

f <- function(m) (m + 3)^2
g <- function(m) log(m + 1)

mult(f(m1), g(m2))

f创建
m2
的指令不会创建发布的矩阵。创建
m2
的指令不会创建发布的矩阵。非常感谢!这似乎奏效了。如果是稍微复杂一点的乘法,你有什么想法可以让这个函数工作吗?例如:(大+3)^2*log(小+1)非常感谢您!这似乎奏效了。如果是稍微复杂一点的乘法,你有什么想法可以让这个函数工作吗?例如:(大+3)^2*log(小+1)