en.newikipedia.org (@niam)




en.newikipedia.org
の紹介とRで最大の行列を作る話

        東京大学 中川研D1
          江原 遥, @niam
           Tsu...
en.newikipedia.org (@niam)
自己紹介
en.newikipedia.org 紹介
http://en.newikipedia.org/wiki/Japan

スマート辞書付きWikipediaです.
• ブラウザをユー...
en.newikipedia.org (@niam)
Wikipediaにneをつけるだけ
en.wikipedia.org/wiki/Japan

en.newikipedia.org/wiki/Japan




             ...
en.newikipedia.org (@niam)




ところで.



                4
en.newikipedia.org (@niam)




このシステム,
Rと何の関係が?


             5
en.newikipedia.org (@niam)




関係ないです
       applyを知らなかったあの頃
2005年頃は,Rでfor文をバリバ
リ書いてたんですが,
最近は,pythonやってます.
              ...
en.newikipedia.org (@niam)




さすがにまずい
ので…


             7
en.newikipedia.org (@niam)




ほぅ…
                    8
en.newikipedia.org (@niam)




なんと.

                    9
en.newikipedia.org (@niam)




実際にやってみた
研究室の
大容量メモリマシンで
             10
en.newikipedia.org (@niam)
topコマンド

Mem: 148,441,292k total,
 12,141,880k used,
 136,299,412k free
1300 x 1800000 ≒
1.3K x...
en.newikipedia.org (@niam)
よし!
> system.time(i.u.mat<-matrix(0,1300,1800000))

   以下にエラー matrix(0, 1300, 1800000)指定された要
  ...
en.newikipedia.org (@niam)
help(“Memory-limits”)
There are also limits on individual objects. On all builds of R,
  the ma...
en.newikipedia.org (@niam)
help(“Memory-limits”)
There are also limits on individual objects. On all builds of R,

    the...
en.newikipedia.org (@niam)
じゃぁ,これはできる?
> system.time(i.u.mat<-matrix(0,1,2^31-1))
                               2^31-1≒2G...
en.newikipedia.org (@niam)
厳密に2^31-1なようです.
> system.time(i.u.mat<-matrix(0,2,2^31-1))
以下にエラー matrix(0, 2, 2^31 - 1) : 指定され...
en.newikipedia.org (@niam)
行列の要素数が2^31-1以下ならOK
> system.time(i.u.mat<-matrix(0,2^15,2^15))
  ユーザ システム             経過
   3....
en.newikipedia.org (@niam)
ベクトルもいけました
> system.time(v<-numeric(2^31-1))
  ユーザ システム           経過
   2.356 3.443 5.801

> sy...
en.newikipedia.org (@niam)
やってはいけない
> quit()
Save workspace image? [y/n/c]: y

                 さすがに,これは,
                ...
en.newikipedia.org (@niam)
ちなみに…
There are also limits on individual objects. On all builds of R,
  the maximum length (nu...
en.newikipedia.org (@niam)
まとめ
• en.newikipedia.org
使ってください.こっちが本題です(笑)

• 行列もベクトルも最大サイズは,要素数が厳密に
  2^31-1個のものでした.
• 理由は,添...
Upcoming SlideShare
Loading in …5
×

Tsukuba.R #7 5/9

2,377 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,377
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tsukuba.R #7 5/9

  1. 1. en.newikipedia.org (@niam) en.newikipedia.org の紹介とRで最大の行列を作る話 東京大学 中川研D1 江原 遥, @niam Tsukuba.R #7 2010/5/09 1
  2. 2. en.newikipedia.org (@niam) 自己紹介 en.newikipedia.org 紹介 http://en.newikipedia.org/wiki/Japan スマート辞書付きWikipediaです. • ブラウザをユーザだと思って,ユーザの英語力に合わせて,ページを ロードしたときに分からなさそうな単語を予測し,最初から訳を付けて おくというのがスマート辞書です. • 最初は,全ユーザの平均的な英語力が想定されます. • 訳がついていない単語をクリックすると訳がつけられます.また,その 単語を本当は知らなかったということなので英語力を調整して,次の ページをロードした時の予測に役立てます. • 逆に訳が付いている単語をクリックすると,訳が引っ込むと同時に,そ の単語は本当は知っていたということなので,英語力を調整して,次 のページをロードした時の予測に役立てます. 2
  3. 3. en.newikipedia.org (@niam) Wikipediaにneをつけるだけ en.wikipedia.org/wiki/Japan en.newikipedia.org/wiki/Japan 3
  4. 4. en.newikipedia.org (@niam) ところで. 4
  5. 5. en.newikipedia.org (@niam) このシステム, Rと何の関係が? 5
  6. 6. en.newikipedia.org (@niam) 関係ないです applyを知らなかったあの頃 2005年頃は,Rでfor文をバリバ リ書いてたんですが, 最近は,pythonやってます. 6
  7. 7. en.newikipedia.org (@niam) さすがにまずい ので… 7
  8. 8. en.newikipedia.org (@niam) ほぅ… 8
  9. 9. en.newikipedia.org (@niam) なんと. 9
  10. 10. en.newikipedia.org (@niam) 実際にやってみた 研究室の 大容量メモリマシンで 10
  11. 11. en.newikipedia.org (@niam) topコマンド Mem: 148,441,292k total, 12,141,880k used, 136,299,412k free 1300 x 1800000 ≒ 1.3K x 1.8M = 2.34 G OK,空いてる 1要素に40バイト使っても, 93.6GB<136GBなので,さすがに 大丈夫だろう. 11
  12. 12. en.newikipedia.org (@niam) よし! > system.time(i.u.mat<-matrix(0,1300,1800000)) 以下にエラー matrix(0, 1300, 1800000)指定された要 素数が多すぎます Timing stopped at:0 0 0 なんでだーーーーーー?? メモリは足りているはずなのに. 12
  13. 13. en.newikipedia.org (@niam) help(“Memory-limits”) There are also limits on individual objects. On all builds of R, the maximum length (number of elements) of a vector is 2^31 - 1 ~ 2*10^9, as lengths are stored as signed integers. In addition, the storage space cannot exceed the address limit, and if you try to exceed that limit, the error message begins ‘cannot allocate vector of length’. The number of characters in a character string is in theory only limited by the address space. 13
  14. 14. en.newikipedia.org (@niam) help(“Memory-limits”) There are also limits on individual objects. On all builds of R, the maximum length (number of elements) of a vector is 2^31 - 1 ~ 2*10^9, as lengths are stored as signed integers. In addition, the storage space cannot exceed the address limit, and if you try to exceed that limit, the error message begins ‘cannot allocate vector of length’. The number of characters in a character string is in theory only limited by the address space. 理由:添字が32bitの符号付きintだから.符号付きなの は,Rでは負の添字を使って,v[-50]で50番目の要素を 除いたベクトルを作る機能があるから. 14
  15. 15. en.newikipedia.org (@niam) じゃぁ,これはできる? > system.time(i.u.mat<-matrix(0,1,2^31-1)) 2^31-1≒2G< 2.34 G ユーザ システム 経過 ≒ 1.3K x 1.8M 7.613 3.882 11.495 だから,さっきの行列は要 素数の制限に引っかかって 出来なかった. できたー!! psでのプロセスのメモリ使用量(RSS) 33,587,916 kbytes 要素数は2G個なので,1要素あたり10バイト以上もメモリを食う計算. 最初,3GBだと思って2個Rを立ち上げたら,79GBぐらい使ってて 慌ててkillしました. 15
  16. 16. en.newikipedia.org (@niam) 厳密に2^31-1なようです. > system.time(i.u.mat<-matrix(0,2,2^31-1)) 以下にエラー matrix(0, 2, 2^31 - 1) : 指定された要素数が 多すぎます Timing stopped at: 0 0 0 > system.time(i.u.mat<-matrix(0,1,2^31)) 以下にエラー matrix(0, 1, 2^31) : 'ncol' の値が不正です(大きすぎるか NA です) 追加情報: 警告メッセージ: In matrix(0, 1, 2^31) : 強制変換により NA が生成されまし た Timing stopped at: 0 0 0 16
  17. 17. en.newikipedia.org (@niam) 行列の要素数が2^31-1以下ならOK > system.time(i.u.mat<-matrix(0,2^15,2^15)) ユーザ システム 経過 3.800 1.991 5.790 ちなみに,2^31-1はオイラーが1772年に発見した,8番目のメ ルセンヌ素数だそうです.2^30-1は素数じゃないようです. http://en.wikipedia.org/wiki/Mersenne_prime 自明(1×nかn×1 )な形でない要素数nが最大の行列を考え ると,n=2^31-1は素数なので無理で,n=2^31-2となります. 2^30-1=pqと因数分解すると(素数ではないので可能), n=2^31-2=2(2^30-1)=2pq なので,2p×qかp×2qの行列になります. 17
  18. 18. en.newikipedia.org (@niam) ベクトルもいけました > system.time(v<-numeric(2^31-1)) ユーザ システム 経過 2.356 3.443 5.801 > system.time(v<-numeric(2^31)) 以下にエラー vector("double", length) : 指定されたベクトルのサイズが長すぎます Timing stopped at: 0.001 0 0 top: 2^31-1のmatrixより5G以上小さくて済むようです. Mem: 148,441,292k total, 28,767,460k used, 119,673,832k free, 262,348k buffers 18
  19. 19. en.newikipedia.org (@niam) やってはいけない > quit() Save workspace image? [y/n/c]: y さすがに,これは, やってみなかった 19
  20. 20. en.newikipedia.org (@niam) ちなみに… There are also limits on individual objects. On all builds of R, the maximum length (number of elements) of a vector is 2^31 - 1 ~ 2*10^9, as lengths are stored as signed integers. In addition, the storage space cannot exceed the address limit, and if you try to exceed that limit, the error message begins ‘cannot allocate The number of characters in vector of length’. a character string is in theory only limited by the address space. 文字列なら,2G以上いけるはず. 20
  21. 21. en.newikipedia.org (@niam) まとめ • en.newikipedia.org 使ってください.こっちが本題です(笑) • 行列もベクトルも最大サイズは,要素数が厳密に 2^31-1個のものでした. • 理由は,添字に32bitのintを使っているからです. 符号付きなのは,Rでは負の添字はその添字の要 素を除いた行列,ベクトルになるという機能がある からです. • 要素数2^31-1では,行列1個33GB程度,ベクトル1 個28GB程度メモリを消費します.要素数が2Gなの で,1要素10バイト以上メモリを食う計算になります. 21

×