我提供了一些数据,以R形式处理矢量形式.这个大小为n(n + 1)/ 2的向量的元素应该在对称矩阵中重新排列.例:
n<-4
x<-seq(from=1,to=n*(n+1)/2)
Run Code Online (Sandbox Code Playgroud)
获得什么是一种很好的方式
mat<- 1 2 3 4
2 5 6 7
3 6 8 9
4 7 9 10
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种快速而灵活的方法来在Matlab中计算以下内容而不使用循环:
c = 1:5;
A = reshape(1:5^3,5,5,5);
res= c(1)*A(:,:,1)+...+c(5)*A(:,:,5)
Run Code Online (Sandbox Code Playgroud)
我认为,与之合作
sum(A,3)
Run Code Online (Sandbox Code Playgroud)
只要我能够沿第三维执行乘法,这可能是一个很好的方法.一个解决方案(但有循环)将是:
val = zeros(length(c),length(c))
for i = 1:length(c)
val = val+c(i)*A(:,:,i)
end
Run Code Online (Sandbox Code Playgroud)
我只是想知道这是否可以以更简单(更优雅)的方式完成,避免循环.
matlab vectorization multidimensional-array matrix-multiplication
我有一个包含时间戳的 data.table 对象(以午夜后的秒数衡量)。我的目标是运行一个函数,该函数为每一行返回观察前最大 $k$ 秒发生的观察次数。
require(data.table, dplyr, dtplyr)
set.seed(123)
DF <- data.frame(Secs=cumsum(rexp(10000,1)))
setDT(DF)
> DF
Secs
1: 8.434573e-01
2: 1.420068e+00
3: 2.749122e+00
4: 2.780700e+00
5: 2.836911e+00
---
9996: 1.003014e+04
9997: 1.003382e+04
9998: 1.003384e+04
9999: 1.003414e+04
10000: 1.003781e+04
Run Code Online (Sandbox Code Playgroud)
我想应用于每一行的功能是
nS<-function(Second,k=5)
max(1,nrow(DF%>%filter(Secs<Second & Secs>=Second-k)))
Run Code Online (Sandbox Code Playgroud)
获得我想要的东西的一种方法是使用apply,这需要很长时间。
system.time(val <- apply(DF,1,nS))
User System verstrichen
20.56 0.03 20.66
#Not working
DF%>%mutate(nS=nS(Secs,100))%>%head()
# Also not working
library(lazyeval)
f = function(col1, new_col_name) {
mutate_call = lazyeval::interp(~ nS(a), a = as.name(col1))
DF%>%mutate_(.dots=setNames(list(mutate_call),new_col_name))
}
head(f('Secs', 'nS'))
DF%>%mutate(minTime=Secs-k)%>%head()
Run Code Online (Sandbox Code Playgroud)
难道不能通过使用 mutate 来实现这种方法吗?非常感谢你的帮助!
我想将 data.frame 转换为具有多列的(booktab)乳胶表,但我无法创建将 放在\toprule表顶部的输出。使用了以下数据
dat <- structure(c(841.8, 804.4, 135.1, 106.2, 0.7025, 0.09645, 305.2,
707.1, 449.3, 119.9, 0.7025, 0.09645), .Dim = c(2L, 6L), .Dimnames = list(
c("ev", "smooth"), c("Mean", "SD", "best", "Mean", "SD",
"best")))
> dat
Mean SD best Mean SD best
ev 841.8 135.1 0.70250 305.2 449.3 0.70250
smooth 804.4 106.2 0.09645 707.1 119.9 0.09645
addtorow <- list()
addtorow$pos <- list(-1)
addtorow$command <- '& \\multicolumn{3}{c}{Tab a}& \\multicolumn{3}{c}{Tab b}\\\\'
print(xtable(dat), add.to.row=addtorow, include.colnames=TRUE,booktabs=TRUE)
Run Code Online (Sandbox Code Playgroud)
输出看起来几乎正确,但\toprule位置错误。
\begin{table}[ht]
\centering
\begin{tabular}{rrrrrrr}
& …Run Code Online (Sandbox Code Playgroud)