2017-03-24 17 views
-1

freq()を使用して、Rのラスタのピクセル値の頻度/カウントを計算しようとしています。 は比較のための2つの例ラスタを作成します。大きなラスタ周波数テーブル/カウント

library(raster) 
RastSmall <- raster(nrow=70, ncol=70) 
RastBig <- raster(nrow=7000, ncol=7000) 
set.seed(0) 
RastSmall[] <- round(runif(1:ncell(r_hr), 1, 5)) 
RastBig[] <- round(runif(1:ncell(r_hr), 1, 5)) 

は(FREQを使用して画素数を取得します)

freq(RastSmall) 
value count 
[1,]  1 6540000 
[2,]  2 12150000 
[3,]  3 12140000 
[4,]  4 11720000 
[5,]  5 6450000 

をしかし、それはかなり大きなファイルであり、すなわち時間まで、非常に長い時間がかかります。 Rの方が速いの? ここでは小規模および大規模なラスタの速度差:

system.time(freq(RastSmall)) 
    user system elapsed 
    0.008 0.000 0.004 
system.time(freq(RastBig)) 
    user system elapsed 
    40.484 0.964 41.445 

はこれをスピードアップする方法はありますか?代わりに、これはgdalツールのようなものを使ってコマンドラインで行うことができますか?

+0

[ask]を読んで、必要な[mcve]を投稿する。 –

+0

例を追加しました。 – mace

+0

私はあなたの質問が入力と出力とコードの間に何があるのか​​分からず、あなたのアルゴリズムがtransofrmationをするために何をすべきかを何も表示していませんが、今あなたは 'awk'タグを削除して、 'R'と答えれば、おそらく' R'エキスパートには完璧な意味があります。がんばろう! –

答えて

0

私は正確にその先週行ったが、私はRでそれを行うための他のより速い方法を見つけることができなかった。私はrqgisパッケージでGRASSのr.reportを呼び出すことを試みた。それは動作しますが、Rのネイティブ関数よりも遅いです。多分あなたはより良い運を持っています。あなたがそれを試してみたい場合のために私のコードは草である:

library(RQGIS) 
monqgis <- set_env("C:\\Mrnmicro\\Applic\\OSGeo4W") 
find_algorithms(search_term = "report", qgis_env = monqgis) 
get_usage(alg = "grass7:r.report", qgis_env = monqgis) 
params <- get_args_man(alg = "grass7:r.report", qgis_env = monqgis) 

get_usage(alg = "grass7:r.report", qgis_env = monqgis) 

params$map <- classif 
params$units <- 5 
params$rawoutput <- "C:\\temp\\outputRQGIS_raw" 
params$html <- "C:\\temp\\outputRQGIS" 

system.time(asas <- run_qgis(alg = "grass7:r.report", params=params,load_output = params$OUTPUT, qgis_env = monqgis))