Skip to content

Instantly share code, notes, and snippets.

@messefor
Created January 15, 2017 04:46
Show Gist options
  • Save messefor/0d480094627f1a74a460b71cc60b3212 to your computer and use it in GitHub Desktop.
Save messefor/0d480094627f1a74a460b71cc60b3212 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# RのBroadcast\n",
"\n",
"RのBroadcast(ベクトル、行列などの型や次元を自動で合わせて演算する)でたまに混乱するのでまとめる。結論だけ書くと**Rではベクトルを行列にBroadcastするとき、列方向で埋め合わせる**という事だけを忘れないようにすればOK"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本原理\n",
"### デフォルトでは列方向で要素を埋めていく\n",
"まず基本原理把握のために、ベクトルから行列を生成してみる。Rではベクトルから行列を生成する際に、デフォルトでは列方向(bycol)優先にで要素を埋めていく。\n",
"例えば、${(1, 2, \\cdots ,20)}$のベクトルから、5x4行列を生成する過程を考える"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<ol class=list-inline>\n",
"\t<li>1</li>\n",
"\t<li>2</li>\n",
"\t<li>3</li>\n",
"\t<li>4</li>\n",
"\t<li>5</li>\n",
"\t<li>6</li>\n",
"\t<li>7</li>\n",
"\t<li>8</li>\n",
"\t<li>9</li>\n",
"\t<li>10</li>\n",
"\t<li>11</li>\n",
"\t<li>12</li>\n",
"\t<li>13</li>\n",
"\t<li>14</li>\n",
"\t<li>15</li>\n",
"\t<li>16</li>\n",
"\t<li>17</li>\n",
"\t<li>18</li>\n",
"\t<li>19</li>\n",
"\t<li>20</li>\n",
"</ol>\n"
],
"text/latex": [
"\\begin{enumerate*}\n",
"\\item 1\n",
"\\item 2\n",
"\\item 3\n",
"\\item 4\n",
"\\item 5\n",
"\\item 6\n",
"\\item 7\n",
"\\item 8\n",
"\\item 9\n",
"\\item 10\n",
"\\item 11\n",
"\\item 12\n",
"\\item 13\n",
"\\item 14\n",
"\\item 15\n",
"\\item 16\n",
"\\item 17\n",
"\\item 18\n",
"\\item 19\n",
"\\item 20\n",
"\\end{enumerate*}\n"
],
"text/markdown": [
"1. 1\n",
"2. 2\n",
"3. 3\n",
"4. 4\n",
"5. 5\n",
"6. 6\n",
"7. 7\n",
"8. 8\n",
"9. 9\n",
"10. 10\n",
"11. 11\n",
"12. 12\n",
"13. 13\n",
"14. 14\n",
"15. 15\n",
"16. 16\n",
"17. 17\n",
"18. 18\n",
"19. 19\n",
"20. 20\n",
"\n",
"\n"
],
"text/plain": [
" [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ベクトル生成\n",
"(v <- 1:20)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<tbody>\n",
"\t<tr><td>1 </td><td>5 </td><td> 9</td><td>13</td><td>17</td></tr>\n",
"\t<tr><td>2 </td><td>6 </td><td>10</td><td>14</td><td>18</td></tr>\n",
"\t<tr><td>3 </td><td>7 </td><td>11</td><td>15</td><td>19</td></tr>\n",
"\t<tr><td>4 </td><td>8 </td><td>12</td><td>16</td><td>20</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
"\t 1 & 5 & 9 & 13 & 17\\\\\n",
"\t 2 & 6 & 10 & 14 & 18\\\\\n",
"\t 3 & 7 & 11 & 15 & 19\\\\\n",
"\t 4 & 8 & 12 & 16 & 20\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| 1 | 5 | 9 | 13 | 17 | \n",
"| 2 | 6 | 10 | 14 | 18 | \n",
"| 3 | 7 | 11 | 15 | 19 | \n",
"| 4 | 8 | 12 | 16 | 20 | \n",
"\n",
"\n"
],
"text/plain": [
" [,1] [,2] [,3] [,4] [,5]\n",
"[1,] 1 5 9 13 17 \n",
"[2,] 2 6 10 14 18 \n",
"[3,] 3 7 11 15 19 \n",
"[4,] 4 8 12 16 20 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ベクトルから行列を生成 (何も指定しないと、列方向で要素が埋められていく)\n",
"(X <- matrix(v, nrow=4, ncol=5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 行方向で埋め合わせたい場合は、byrowオプションを入れましょう\n",
"要素を行方向で使う場合には、byrow=TRUEを指定すれば良い"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<tbody>\n",
"\t<tr><td> 1</td><td> 2</td><td> 3</td><td> 4</td><td> 5</td></tr>\n",
"\t<tr><td> 6</td><td> 7</td><td> 8</td><td> 9</td><td>10</td></tr>\n",
"\t<tr><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td></tr>\n",
"\t<tr><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
"\t 1 & 2 & 3 & 4 & 5\\\\\n",
"\t 6 & 7 & 8 & 9 & 10\\\\\n",
"\t 11 & 12 & 13 & 14 & 15\\\\\n",
"\t 16 & 17 & 18 & 19 & 20\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| 1 | 2 | 3 | 4 | 5 | \n",
"| 6 | 7 | 8 | 9 | 10 | \n",
"| 11 | 12 | 13 | 14 | 15 | \n",
"| 16 | 17 | 18 | 19 | 20 | \n",
"\n",
"\n"
],
"text/plain": [
" [,1] [,2] [,3] [,4] [,5]\n",
"[1,] 1 2 3 4 5 \n",
"[2,] 6 7 8 9 10 \n",
"[3,] 11 12 13 14 15 \n",
"[4,] 16 17 18 19 20 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# ベクトルから行列を生成 (byrowオプションを指定することで、要素を行方向で埋めることもできる)\n",
"(X <- matrix(v, nrow=4, ncol=5, byrow=TRUE))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"デフォルトでは、ベクトルから行列を生成する際、列方向に使うという事。この基本原理でBroadcastも行われるのだろうと想像できる"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 実際にBroadcastしてみる\n",
"実際にベクトルと行列を演算して、Broadcastしてみます"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<tbody>\n",
"\t<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"\t<tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
"\t 0 & 0 & 0 & 0 & 0\\\\\n",
"\t 0 & 0 & 0 & 0 & 0\\\\\n",
"\t 0 & 0 & 0 & 0 & 0\\\\\n",
"\t 0 & 0 & 0 & 0 & 0\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| 0 | 0 | 0 | 0 | 0 | \n",
"| 0 | 0 | 0 | 0 | 0 | \n",
"| 0 | 0 | 0 | 0 | 0 | \n",
"| 0 | 0 | 0 | 0 | 0 | \n",
"\n",
"\n"
],
"text/plain": [
" [,1] [,2] [,3] [,4] [,5]\n",
"[1,] 0 0 0 0 0 \n",
"[2,] 0 0 0 0 0 \n",
"[3,] 0 0 0 0 0 \n",
"[4,] 0 0 0 0 0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 4×5の0行列を生成\n",
"(A <- matrix(0, nrow=4, ncol=5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"実際に足し算してみると列方向で行列にBroadcastされていることがわかる。\n",
"うっかりしているとバグを生むので気をつかないといけない"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<tbody>\n",
"\t<tr><td>1 </td><td>5 </td><td> 9</td><td>13</td><td>17</td></tr>\n",
"\t<tr><td>2 </td><td>6 </td><td>10</td><td>14</td><td>18</td></tr>\n",
"\t<tr><td>3 </td><td>7 </td><td>11</td><td>15</td><td>19</td></tr>\n",
"\t<tr><td>4 </td><td>8 </td><td>12</td><td>16</td><td>20</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
"\t 1 & 5 & 9 & 13 & 17\\\\\n",
"\t 2 & 6 & 10 & 14 & 18\\\\\n",
"\t 3 & 7 & 11 & 15 & 19\\\\\n",
"\t 4 & 8 & 12 & 16 & 20\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| 1 | 5 | 9 | 13 | 17 | \n",
"| 2 | 6 | 10 | 14 | 18 | \n",
"| 3 | 7 | 11 | 15 | 19 | \n",
"| 4 | 8 | 12 | 16 | 20 | \n",
"\n",
"\n"
],
"text/plain": [
" [,1] [,2] [,3] [,4] [,5]\n",
"[1,] 1 5 9 13 17 \n",
"[2,] 2 6 10 14 18 \n",
"[3,] 3 7 11 15 19 \n",
"[4,] 4 8 12 16 20 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 行列とベクトルの足し算(element wise)でBroadcastしてみる\n",
"(A + v)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## まぜると危険(中心化する場合)\n",
"よくある処理の例で見ていきます。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"行列を各変数(列)ごとに中心化してみましょう。よくやる $ {\\bf X} - {\\bf E}({\\bf X}) $ です。"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>x1</th><th scope=col>x2</th><th scope=col>x3</th><th scope=col>x4</th><th scope=col>x5</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td>45</td><td>10</td><td> 3</td><td>39</td><td>39</td></tr>\n",
"\t<tr><td>13</td><td>45</td><td>10</td><td>25</td><td>47</td></tr>\n",
"\t<tr><td>18</td><td>48</td><td> 9</td><td>36</td><td>10</td></tr>\n",
"\t<tr><td>29</td><td>33</td><td>35</td><td>50</td><td>33</td></tr>\n",
"\t<tr><td>46</td><td>32</td><td>19</td><td>19</td><td> 6</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
" x1 & x2 & x3 & x4 & x5\\\\\n",
"\\hline\n",
"\t 45 & 10 & 3 & 39 & 39\\\\\n",
"\t 13 & 45 & 10 & 25 & 47\\\\\n",
"\t 18 & 48 & 9 & 36 & 10\\\\\n",
"\t 29 & 33 & 35 & 50 & 33\\\\\n",
"\t 46 & 32 & 19 & 19 & 6\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"x1 | x2 | x3 | x4 | x5 | \n",
"|---|---|---|---|---|\n",
"| 45 | 10 | 3 | 39 | 39 | \n",
"| 13 | 45 | 10 | 25 | 47 | \n",
"| 18 | 48 | 9 | 36 | 10 | \n",
"| 29 | 33 | 35 | 50 | 33 | \n",
"| 46 | 32 | 19 | 19 | 6 | \n",
"\n",
"\n"
],
"text/plain": [
" x1 x2 x3 x4 x5\n",
"[1,] 45 10 3 39 39\n",
"[2,] 13 45 10 25 47\n",
"[3,] 18 48 9 36 10\n",
"[4,] 29 33 35 50 33\n",
"[5,] 46 32 19 19 6"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 0-50のランダムな数で、5x5行列を生成\n",
"set.seed(0)\n",
"(X <- matrix(sample(0:50, 25, replace=TRUE), nrow=5, dimnames = list(NULL,paste0('x', as.character(1:5)))))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<dl class=dl-horizontal>\n",
"\t<dt>x1</dt>\n",
"\t\t<dd>30.2</dd>\n",
"\t<dt>x2</dt>\n",
"\t\t<dd>33.6</dd>\n",
"\t<dt>x3</dt>\n",
"\t\t<dd>15.2</dd>\n",
"\t<dt>x4</dt>\n",
"\t\t<dd>33.8</dd>\n",
"\t<dt>x5</dt>\n",
"\t\t<dd>27</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description*}\n",
"\\item[x1] 30.2\n",
"\\item[x2] 33.6\n",
"\\item[x3] 15.2\n",
"\\item[x4] 33.8\n",
"\\item[x5] 27\n",
"\\end{description*}\n"
],
"text/markdown": [
"x1\n",
": 30.2x2\n",
": 33.6x3\n",
": 15.2x4\n",
": 33.8x5\n",
": 27\n",
"\n"
],
"text/plain": [
" x1 x2 x3 x4 x5 \n",
"30.2 33.6 15.2 33.8 27.0 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 列の平均値を取る\n",
"(X.center <- colMeans(X))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ダメな例\n",
"もとの行列から平均値を引いていくのですが、そのまま引くと意図と異なる値が出ます。以下は間違いです"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>x1</th><th scope=col>x2</th><th scope=col>x3</th><th scope=col>x4</th><th scope=col>x5</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td> 14.8</td><td>-20.2</td><td>-27.2</td><td> 8.8 </td><td> 8.8</td></tr>\n",
"\t<tr><td>-20.6</td><td> 11.4</td><td>-23.6</td><td>-8.6 </td><td> 13.4</td></tr>\n",
"\t<tr><td> 2.8</td><td> 32.8</td><td> -6.2</td><td>20.8 </td><td> -5.2</td></tr>\n",
"\t<tr><td> -4.8</td><td> -0.8</td><td> 1.2</td><td>16.2 </td><td> -0.8</td></tr>\n",
"\t<tr><td> 19.0</td><td> 5.0</td><td> -8.0</td><td>-8.0 </td><td>-21.0</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
" x1 & x2 & x3 & x4 & x5\\\\\n",
"\\hline\n",
"\t 14.8 & -20.2 & -27.2 & 8.8 & 8.8\\\\\n",
"\t -20.6 & 11.4 & -23.6 & -8.6 & 13.4\\\\\n",
"\t 2.8 & 32.8 & -6.2 & 20.8 & -5.2\\\\\n",
"\t -4.8 & -0.8 & 1.2 & 16.2 & -0.8\\\\\n",
"\t 19.0 & 5.0 & -8.0 & -8.0 & -21.0\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"x1 | x2 | x3 | x4 | x5 | \n",
"|---|---|---|---|---|\n",
"| 14.8 | -20.2 | -27.2 | 8.8 | 8.8 | \n",
"| -20.6 | 11.4 | -23.6 | -8.6 | 13.4 | \n",
"| 2.8 | 32.8 | -6.2 | 20.8 | -5.2 | \n",
"| -4.8 | -0.8 | 1.2 | 16.2 | -0.8 | \n",
"| 19.0 | 5.0 | -8.0 | -8.0 | -21.0 | \n",
"\n",
"\n"
],
"text/plain": [
" x1 x2 x3 x4 x5 \n",
"[1,] 14.8 -20.2 -27.2 8.8 8.8\n",
"[2,] -20.6 11.4 -23.6 -8.6 13.4\n",
"[3,] 2.8 32.8 -6.2 20.8 -5.2\n",
"[4,] -4.8 -0.8 1.2 16.2 -0.8\n",
"[5,] 19.0 5.0 -8.0 -8.0 -21.0"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 普通に引き算してしまうと列方向でBroadcastされるのでNG\n",
"(X - X.center)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 正しい例\n",
"正しくは行方向でBroadcastしてもらわないとダメです。例えば以下のような方法があります"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>x1</th><th scope=col>x2</th><th scope=col>x3</th><th scope=col>x4</th><th scope=col>x5</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td> 14.8</td><td>-23.6</td><td>-12.2</td><td> 5.2</td><td> 12 </td></tr>\n",
"\t<tr><td>-17.2</td><td> 11.4</td><td> -5.2</td><td> -8.8</td><td> 20 </td></tr>\n",
"\t<tr><td>-12.2</td><td> 14.4</td><td> -6.2</td><td> 2.2</td><td>-17 </td></tr>\n",
"\t<tr><td> -1.2</td><td> -0.6</td><td> 19.8</td><td> 16.2</td><td> 6 </td></tr>\n",
"\t<tr><td> 15.8</td><td> -1.6</td><td> 3.8</td><td>-14.8</td><td>-21 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
" x1 & x2 & x3 & x4 & x5\\\\\n",
"\\hline\n",
"\t 14.8 & -23.6 & -12.2 & 5.2 & 12 \\\\\n",
"\t -17.2 & 11.4 & -5.2 & -8.8 & 20 \\\\\n",
"\t -12.2 & 14.4 & -6.2 & 2.2 & -17 \\\\\n",
"\t -1.2 & -0.6 & 19.8 & 16.2 & 6 \\\\\n",
"\t 15.8 & -1.6 & 3.8 & -14.8 & -21 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"x1 | x2 | x3 | x4 | x5 | \n",
"|---|---|---|---|---|\n",
"| 14.8 | -23.6 | -12.2 | 5.2 | 12 | \n",
"| -17.2 | 11.4 | -5.2 | -8.8 | 20 | \n",
"| -12.2 | 14.4 | -6.2 | 2.2 | -17 | \n",
"| -1.2 | -0.6 | 19.8 | 16.2 | 6 | \n",
"| 15.8 | -1.6 | 3.8 | -14.8 | -21 | \n",
"\n",
"\n"
],
"text/plain": [
" x1 x2 x3 x4 x5 \n",
"[1,] 14.8 -23.6 -12.2 5.2 12\n",
"[2,] -17.2 11.4 -5.2 -8.8 20\n",
"[3,] -12.2 14.4 -6.2 2.2 -17\n",
"[4,] -1.2 -0.6 19.8 16.2 6\n",
"[5,] 15.8 -1.6 3.8 -14.8 -21"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 1.明示的に行方向で行列に変換\n",
"X - matrix(X.center, nrow=5, ncol=5, byrow=TRUE)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th scope=col>x1</th><th scope=col>x2</th><th scope=col>x3</th><th scope=col>x4</th><th scope=col>x5</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><td> 14.8</td><td>-23.6</td><td>-12.2</td><td> 5.2</td><td> 12 </td></tr>\n",
"\t<tr><td>-17.2</td><td> 11.4</td><td> -5.2</td><td> -8.8</td><td> 20 </td></tr>\n",
"\t<tr><td>-12.2</td><td> 14.4</td><td> -6.2</td><td> 2.2</td><td>-17 </td></tr>\n",
"\t<tr><td> -1.2</td><td> -0.6</td><td> 19.8</td><td> 16.2</td><td> 6 </td></tr>\n",
"\t<tr><td> 15.8</td><td> -1.6</td><td> 3.8</td><td>-14.8</td><td>-21 </td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{lllll}\n",
" x1 & x2 & x3 & x4 & x5\\\\\n",
"\\hline\n",
"\t 14.8 & -23.6 & -12.2 & 5.2 & 12 \\\\\n",
"\t -17.2 & 11.4 & -5.2 & -8.8 & 20 \\\\\n",
"\t -12.2 & 14.4 & -6.2 & 2.2 & -17 \\\\\n",
"\t -1.2 & -0.6 & 19.8 & 16.2 & 6 \\\\\n",
"\t 15.8 & -1.6 & 3.8 & -14.8 & -21 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"x1 | x2 | x3 | x4 | x5 | \n",
"|---|---|---|---|---|\n",
"| 14.8 | -23.6 | -12.2 | 5.2 | 12 | \n",
"| -17.2 | 11.4 | -5.2 | -8.8 | 20 | \n",
"| -12.2 | 14.4 | -6.2 | 2.2 | -17 | \n",
"| -1.2 | -0.6 | 19.8 | 16.2 | 6 | \n",
"| 15.8 | -1.6 | 3.8 | -14.8 | -21 | \n",
"\n",
"\n"
],
"text/plain": [
" x1 x2 x3 x4 x5 \n",
"[1,] 14.8 -23.6 -12.2 5.2 12\n",
"[2,] -17.2 11.4 -5.2 -8.8 20\n",
"[3,] -12.2 14.4 -6.2 2.2 -17\n",
"[4,] -1.2 -0.6 19.8 16.2 6\n",
"[5,] 15.8 -1.6 3.8 -14.8 -21"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 2. 一度transposeして、戻す\n",
"t(t(X) - X.center)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.3.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment