1
在R中,函数%*%
是做矩阵乘法运算。 例如,定义一个函数,如'%*%`在R中操作矩阵R
A = matrix(c(1,2,1,1), ncol=2)
B = matrix(c(3,0,1,0), ncol=2)
C = A %*% B
A
[,1] [,2]
[1,] 1 1
[2,] 2 1
B
[,1] [,2]
[1,] 3 1
[2,] 0 0
C
[,1] [,2]
[1,] 3 1
[2,] 6 2
所以,C [1,1] = A [1,1] * B [1,1] + A [1,2] * B [2,1]。 C的其他元素也是以这种方式获得的。
该功能的速度非常快。我想这个函数是用C或C++编写的。
现在,我要定义一个名为%!%
使用R安置另一个功能,使d = A%%B. d的期望的结果应该是如下:
D = matrix(c(3,1,2,2), ncol=2, byrow=T)
D
[,1] [,2]
[1,] 3 1
[2,] 2 2
其中,
D[1, 1] = abs(A[1,1]-B[1,1]) + abs(A[1,2]-B[2,1])
D的其他条目的计算方式与第1条相同。
的分子式:
A的尺寸为m乘n。 B的尺寸是n乘p。而m可能等于n。 n可能等于p。
那么,如何定义这个%!%
函数?目前,我已使用sapply
定义了此功能。但是我的功能速度比%*%
慢很多,我想知道是否还有其他更有效的方法。
这是我的定义。
`%!%` <- function(A, B) {
E <- sapply(1:ncol(t(A)), function(x){
colSums(abs(B - t(A)[,x]), na.rm=TRUE)
})
return(t(E))
}
Thx为您的信息。 @李哲源ZheyuanLi –
你没有指定你的功能。你已经告诉我们在2x2的情况下有什么1条目,其他3条未指定,而其他维度未定义。我大概可以解开它,但是我宁愿你给出一个明确的定义而不是一个例子。 –
其他条目的计算方式与第1条相同。查看我的更新。谢谢。 @JohnColeman –