gpt4 book ai didi

r - Matlab bsxfun(@times,...,...) 等价于 R

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:02 26 4
gpt4 key购买 nike

R 有没有等同于 Matlab bsxfun(@times,a,b)?假设要对矩阵 a,b 执行元素明智的乘法:

Matlab:

a=[1 0 3 -4];
b=[0 1 5 7; 2 9 -3 4];

bsxfun(@times,a,b) = [0 0 15 -28; 2 0 -9 -16]

R:

a<-c(1,0,3,-4)
b<-matrix(c(0,2,1,9,5,-3,7,4),nrow = 2,ncol = 4)

a * b = matrix(c(0,0,3,-36,5,0,21,-16),nrow = 2,ncol = 4)

关于 R 获取上述 a*b 结果的任何想法,因为我期望它与 Matlab 相同bsxfun(@times,a,b)

编辑:

bsxfun("*",repmat(a,2,1),b) # using R {pracma}

最佳

最佳答案

用列主矩阵来做,因为那是 R 约定:

> b<-matrix(c(0,2,1,9,5,-3,7,4),nrow = 4,ncol = 2)
> a*b
[,1] [,2]
[1,] 0 5
[2,] 0 0
[3,] 3 21
[4,] -36 -16

如果您使用 b 的原始构造,当您尝试使用 sweep 时,您会感到有点不愉快:

> b2<-matrix(c(0,2,1,9,5,-3,7,4),nrow = 2,ncol = 4)
> sweep(b2, 2, a, '*')
[,1] [,2] [,3] [,4]
[1,] 0 0 15 -28
[2,] 2 0 -9 -16

由于 matrix 函数使用位置的列主要填充,并且您没有在其调用中指定 byrow=TRUE,因此 b-matrix 与您的 Matlab 不同矩阵。

> b3<-matrix(c(0,2,1,9,5,-3,7,4),nrow = 2,ncol = 4, byrow=TRUE)
> sweep(b3, 2, a, '*')
[,1] [,2] [,3] [,4]
[1,] 0 0 3 -36
[2,] 5 0 21 -16

关于r - Matlab bsxfun(@times,...,...) 等价于 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820307/

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