gpt4 book ai didi

r - 应用一个函数,将矩阵的列和行作为输入,将矩阵作为输出,而不使用循环

转载 作者:行者123 更新时间:2023-12-04 23:37:13 24 4
gpt4 key购买 nike

我想编写一个函数,它将矩阵的列和行作为参数,并给出一个矩阵作为输出。

例如,一个函数采用 m × k 矩阵 A 的行 i 和 k × n 矩阵 B 的 j 列,并返回一个矩阵 M,其中元素 m_i,j 等于 min(A[i,] * B[,j]) (逐元素乘法):

有什么简单的方法可以避免使用循环吗?是否有 sapply矩阵的等价物存在吗?

> matrix_A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 0 1 2 3 4
[5,] 5 6 7 8 9
> matrix_B
[,1] [,2] [,3] [,4] [,5]
[1,] 7 6 5 4 3
[2,] 6 5 4 3 2
[3,] 1 2 3 4 5
[4,] 8 7 6 5 4
[5,] 9 8 7 6 5
>
> output_matrix <- matrix(, nrow=nrow(matrix_A), ncol=ncol(matrix_B))
> for (row_i in 1:nrow(matrix_A)) {
+ for (col_j in 1:ncol(matrix_B)) {
+ output_matrix[row_i, col_j] <- min(matrix_A[row_i,]*matrix_B[,col_j])
+ }
+ }
> output_matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 3 6 5 4 3
[2,] 4 8 10 8 6
[3,] 5 10 15 12 8
[4,] 0 0 0 0 0
[5,] 7 14 21 18 12
>

最佳答案

使用 apply从基础 R,

apply(m2, 2, function(i) apply(m1, 1, function(j) min(j*i)))

这使,

     [,1] [,2] [,3] [,4] [,5]
[1,] 3 6 5 4 3
[2,] 4 8 10 8 6
[3,] 5 10 15 12 8
[4,] 0 0 0 0 0
[5,] 7 14 21 18 12


一个完全矢量化的解决方案可以是,
t(matrix(do.call(pmin, 
as.data.frame(
do.call(rbind, rep(split(m1, 1:nrow(m1)), each = 5)) * do.call(rbind, rep(split(t(m2), 1:nrow(m2)), 5)))),
nrow(m1)))

关于r - 应用一个函数,将矩阵的列和行作为输入,将矩阵作为输出,而不使用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com