R中是否有任何函数在二维数组上执行以下过程?
假设我有一个类似的数组:
0 0 0 1 0 1
1 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 1 1
我想在水平方向上对此数组进行线性卷积,或者更详细地说我想要一个函数来水平移动数组(添加零)并将它生成点到主数组并总结所有元素结果数组。
所以结果将是一个线性向量
在这个例子中,结果将是:
0,2,1,2,1,9,1,2,1,2,0
例如,第二个数字是2,是点生成主矩阵的结果,只有2个最后一列的副本作为第1列和第2列(其余列的其他零填充)并将所有结果相加元素在一起:
0 0 0 1 0 1
1 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 1 1
元素产品:
0 1 0 0 0 0
0 0 0 0 0 0
1 0 0 0 0 0
1 1 0 0 0 0
结果:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 1 0 0 0 0
最后通过对所有元素求和得出= 2
答案 0 :(得分:1)
没有这样的功能,但主要的想法很简单:
shift <- function(m) {
cbind(m[, -1], rep(0, nrow(m)))
}
shifted_prod <- function(m) {
mm <- m
val <- numeric(ncol(m))
for (i in 1:ncol(m)) {
m <- shift(m)
val[i] <- sum(m * mm)
}
val
}
shifted_prod(m)
#[1] 1 2 1 1 0 0
我仍然不明白你对结果的期望2(元素[4,2]是1,其他都是0)。您可以添加print
语句,逐步观察for
循环。
最后你可能想要rev(val)
之类的内容(请参阅自己),因为现在val[k]
是通过移动原始矩阵k
次获得的结果。