リストのリストを持っていて、N行1行(Nは引数として渡される数値)の行を追加する各行を意味します。つまり、行列内の行を結合する
1 2 3
4 5 6
7 8 9
1 2 3
有するN = 2が私にのみ3行(行 - N + 1)を有するマトリックス与える:N = 4の場合
1 2 3 4 5 6 7 8 9 // row1+row2+row3
4 5 6 7 8 9 1 2 3 // row2+row3+row4
:N = 3の場合
1 2 3 4 5 6 // row1+row2
4 5 6 7 8 9 // row2+row3
7 8 9 1 2 3 // row3+row4
をそれは傷つくdはすべての行を連結して1行を返します。n> 4の場合は失敗します。
私は
はRでかなり簡単なコードは、(ここでR初心者)これを実行する必要があります:ngram <- function(inp, window){
rows <- dim(inp)[1]
cols <- dim(inp)[2]
resRows <- rows - window + 1
res <- c()
for(idx in 1:resRows) {
newRow <- inp[idx,]
for(ii in 1:(window-1)) {
newRow <- c(newRow, inp[idx+ii,])
}
res <- rbind(res,newRow)
}
return(res)
}
iot <- read.csv("resources/data.csv")
iot <- ngram(iot, 5)
の問題は、私が思うに、私は例n=10
のために置いた場合、非常に遅いc(newRow, inp[idx+ii,])
、です。私がしたいことをするためのより良い方法はありますか?
になり '追加されますwindow-1'行を各行に追加します。たとえば、 'window = 3'の場合、各行は3つの古い行を含んでいなければなりません。私はそれらをNgramと呼んでいます。なぜなら、NLPでは「私はパイが大好きです。」という言葉では「ウィンドウが3」のように「パイが好き」、「パイがとても好き」、「パイがとても好きです。それは似ています。私はそこに複数の行を渡すことができるか分からなかったが、c/cbingのチップのおかげで。 –
あなたのヒントで私はこの 'c(inp [idx、]、t(inp [idx + 1:(idx + window-1)、]))')のようにすることができます 'しかし、私はまだすべての行それらのほとんど)、それはまだ長い時間がかかります。 –
また、あなたのコードスニペットのおかげで、私は 'as.matrix'を使ってデータを行列に変更しなければならないと思っていました。それはすごくスピードアップし、問題はなくなりました。 :-) –