如何将对称矩阵NxN的行的每个元素除以列向量(Nx1),使得我不能获得Nx1向量而是再次获得对称矩阵NxN,其中沿着行的每个元素被除以列向量的副本元素? 矩阵:
In1 In2 In3 In4
In1 0
In2 0 0
In3 0,125 0,125 0
In4 0 0 0,125 0
这里是列向量:
0,125
0,25
0,625
0,25
这里是分裂后的最终矩阵:
In1 In2 In3 In4
In1 0
In2 0 0
In3 0,2 0,2 0
In4 0 0 0,5 0
提前感谢您的帮助!
答案 0 :(得分:0)
这里是通过tbl
(数据框)的路线,因为它可以通过列进行映射,并且因为read_table2
比手动输入数据更好(请提供可重复的数据)格式!)。最后两行只是强制回到请求的矩阵形式。
library(tidyverse)
tbl <- read_table2(
"In1 In2 In3 In4
0
0 0
0.125 0.125 0
0 0 0.125 0"
)
#> Warning: 2 parsing failures.
#> row # A tibble: 2 x 5 col row col expected actual file expected <int> <chr> <chr> <chr> <chr> actual 1 1 <NA> 4 columns 2 columns literal data file 2 2 <NA> 4 columns 3 columns literal data
vec <- c(0.125, 0.25, 0.625, 0.25)
tbl %>%
map_dfc(~ . / vec) %>%
as.matrix() %>%
`rownames<-`(colnames(.))
#> In1 In2 In3 In4
#> In1 0.0 NA NA NA
#> In2 0.0 0.0 NA NA
#> In3 0.2 0.2 0.0 NA
#> In4 0.0 0.0 0.5 0
由reprex package(v0.2.0)创建于2018-03-13。
答案 1 :(得分:0)
转置矩阵,将其乘以对角矩阵,其条目是列向量中条目的倒数,然后转置结果。
x <- matrix(1:16, 4)
v <- c(1:4)
t(t(x) %*% diag(1 / v)) v <- c(1:4)
t(t(x) %*% diag(1 / v))