用列向量

时间:2018-03-13 16:57:27

标签: r

如何将对称矩阵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

提前感谢您的帮助!

2 个答案:

答案 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))