r - 将矩阵的元素与向量值相乘

标签 r matrix elementwise-operations

我有一个矩阵 M,我想创建 3 个额外的矩阵,其中每个额外的矩阵都有特定的 3x3 列切片 M 乘以向量中的值,然后我将生成的 3 个新矩阵存储在 列表中

##create the initial matrix
M <- matrix(1:20, nrow = 4)

    [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

## coordinates in the matrix I want to alter 
iy <- c(1, 2, 3)
ix <- c(1, 4, 5)
coords <- as.data.frame(cbind(ix, iy))


## multiplier values
multis <- c(0.1, 2, 100)

我想做的伪代码

mapply (function(multis, cords) {multis * M[coords$iy, coords$ix]})

结果应该是什么样的

  [[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]  0.1    5    9 13.0 17.0
[2,]  2.0    6   10  1.4 18.0
[3,]  3.0    7   11 15.0  1.1
[4,]  4.0    8   12 16.0 20.0

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    5    9   13   17
[2,]    2    6   10   28   18
[3,]    3    7   11   15   38
[4,]    4    8   12   16   20

[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,]  100    5    9   13   17
[2,]    2    6   10 1400   18
[3,]    3    7   11   15 1900
[4,]    4    8   12   16   20

最佳答案

首先需要将coords 强制转换为矩阵进行索引,然后反转列顺序。然后它只是一个简单的 lapply() 循环。

coords <- as.matrix(coords)[, 2:1]
lapply(multis, function(x) {
    M[coords] <- M[coords] * x
    M
})

导致

[[1]]
     [,1] [,2] [,3] [,4] [,5]
[1,]  0.1    5    9 13.0 17.0
[2,]  2.0    6   10  1.4 18.0
[3,]  3.0    7   11 15.0  1.9
[4,]  4.0    8   12 16.0 20.0

[[2]]
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    5    9   13   17
[2,]    2    6   10   28   18
[3,]    3    7   11   15   38
[4,]    4    8   12   16   20

[[3]]
     [,1] [,2] [,3] [,4] [,5]
[1,]  100    5    9   13   17
[2,]    2    6   10 1400   18
[3,]    3    7   11   15 1900
[4,]    4    8   12   16   20

关于r - 将矩阵的元素与向量值相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48677257/

相关文章:

python - 创建 |N| x |M|来自哈希表的矩阵

c - sscanf 在未知大小的矩阵上的用法?

c - 在 C 中分配矩阵

javascript - 如何将自定义标量函数按元素应用于 math.js 中的矩阵?

r - Shiny 的服务器用户/用户组

r - 将 YYYYMMDDHHMMSS 转换为 r 中的日期和时间类

r - & 和 &&, | 有什么区别和 ||在 R 中?

mysql - 在 MySQL 或 R 中对分析数据进行下采样

arrays - 通过对其他两个数组的所有元素应用二元运算在 Swift 中创建一个数组

arrays - 通过对另外两个数组的所有元素应用二元运算来在 Swift 中创建数组