Created
January 15, 2017 04:46
-
-
Save messefor/0d480094627f1a74a460b71cc60b3212 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "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