当尝试将数组的第一个维度乘以第二个维度的向量的每个索引时,我的数组将转换为矩阵,并且事情变得松散。我只能长时间做适当的乘法。
嘴巴满满的......
使用代码更容易解释......
Arr <- array(runif(10*5*3), dim = c(10,5,3))
dim(Arr)
Vect <- c(1:5)
Arr[,1,1] <- Arr[,1,1]*Vect[1]
Arr[,1,2] <- Arr[,1,2]*Vect[1]
Arr[,1,3] <- Arr[,1,3]*Vect[1]
Arr[,2,1] <- Arr[,2,1]*Vect[2]
Arr[,2,2] <- Arr[,2,2]*Vect[2]
Arr[,2,3] <- Arr[,2,3]*Vect[2]
Arr[,3,1] <- Arr[,3,1]*Vect[3]
Arr[,3,2] <- Arr[,3,2]*Vect[3]
Arr[,3,3] <- Arr[,3,3]*Vect[3]
Arr[,4,1] <- Arr[,4,1]*Vect[4]
Arr[,4,2] <- Arr[,4,2]*Vect[4]
Arr[,4,3] <- Arr[,4,3]*Vect[4]
Arr[,5,1] <- Arr[,5,1]*Vect[5]
Arr[,5,2] <- Arr[,5,2]*Vect[5]
Arr[,5,3] <- Arr[,5,3]*Vect[5]
如何将其清理为一个命令?
答案 0 :(得分:5)
首先将Vect
投射到数组中,然后将元素乘以:
varr <- aperm(array(Vect, dim = c(5L, 10L, 3L)), perm = c(2L, 1L, 3L))
Arr <- varr * Arr
(当然,如果您想在一个命令中使用此内容,我们不需要存储varr
)
(另外,事实证明这基本上是sweep
在幕后做的......)
答案 1 :(得分:4)
尝试:
map(lambda x: self.classify_word(x) ,re.sub("[^\w]", " ", body).split())
答案 2 :(得分:1)
plyr包中的aaply()
功能完全符合您的需求。它可以在任何维度的数组上运行,并根据需要拆分它们。在这种情况下,您按行拆分:
library(plyr)
Arr2 <- aaply(Arr, 1, function(x,y){x*y}, Vect)
答案 3 :(得分:1)
我们也可以复制'Vect&#39;并乘以&#39; Arr&#39;。 col
是一个方便的函数,它提供列的数字索引。
res1 <- Arr * Vect[col(Arr[,,1])]
或者我们明确地执行rep
res2 <- Arr* rep(Vect, each=dim(Arr)[1])
identical(res1, res2)
#[1] TRUE