<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" version="2.0">
  <channel>
    <title>（す）メモ帳</title>
    <link>https://marusu.asablo.jp/blog/</link>
    <description/>
    <language>ja</language>
    <generator>mc 0.0</generator>
    <pubDate>Thu, 04 Feb 2016 18:55:29 +0900</pubDate>
    <item>
      <title>スクリーンショットを撮るアプリ</title>
      <link>https://marusu.asablo.jp/blog/2016/02/04/8008673</link>
      <guid>https://marusu.asablo.jp/blog/2016/02/04/8008673</guid>
      <pubDate>Thu, 04 Feb 2016 20:17:40 +0900</pubDate>
      <dcterms:modified>2016-02-04T18:55:29+09:00</dcterms:modified>
      <dcterms:created>2016-02-04T18:19:05+09:00</dcterms:created>
      <description>グラフを出したり、処理結果を表示したりした時に、それを比べたい時がある。パラメータをいろいろ変えて、試してみているんだけど、さっきと比べてどう違ったのか？&lt;br&gt;&#13;
そんな時に、スクリーンショットを撮って比べていた。&lt;br&gt;&lt;br&gt;&#13;
Windows だと、PrintScreen キーを使って、スクリーンショットを撮ることができるけど、撮ったスクリーンショットは、クリップボードに記憶されるので、ペイントとかに貼り付けて見ていた。[alt]+[PrtScn] で撮って、ペイントを立ち上げて、[ctl]+[v] で貼り付けて・・・面倒くさい。&lt;br&gt;&lt;br&gt;&#13;
&lt;b&gt;「スクリーンショットを自動的に保存！」&lt;/b&gt; みたいなソフトはあるんだけど、結局その画像を開かないといけないし・・・&lt;br&gt;&lt;br&gt;&#13;
スクリーンショットを撮ったら表示だけしてくれるソフトがないかと探したんだけど見つからない。そんなことするやついないのかなぁ・・・&lt;br&gt;&#13;
自分で作ればいいんだけど、ウィンドウズのアプリはむかーし、Delphi で作って以来。コンソールアプリは作るけど、UI系は面倒だし、キーイベントのフックとかどうやればいいか分からないし・・・と落ち込んだんだけど、落ち込んでいても始まらないので、&lt;br&gt;&lt;br&gt;&#13;
&lt;b&gt;アプリを作ってもらった。作ったんじゃなくて、作ってもらった。&lt;/b&gt;&lt;br&gt;&lt;br&gt;&#13;
ワンコイン(500円)でいろいろと願い事を聞いてくれるってサービス、&lt;a href=http://coconala.com/&gt;ココナラ&lt;/a&gt;。&lt;br&gt;&lt;br&gt;&#13;
 bootstrap さんってかたにお願いした。アプリのプログラミングしてる人ならチャチャっと書けちゃうんですね、こんなのが。&lt;br&gt;&lt;br&gt;&#13;
で、&lt;a href= https://www.dropbox.com/sh/ovmkrzlnui4pky7/AABrRPX_r9-w-LKaqK0XZn2Ra?dl=0&gt;出来たのがこちらになります。 &lt;/a&gt;&lt;br&gt;&lt;br&gt;&#13;
(ログインしろって言われるけど、気にせず×押してからダウンロードしてね。)&#13;
&lt;br&gt;&lt;br&gt;&#13;
すごいよ、&lt;b&gt;[alt] + [PrnScn] だけでウィンドウのスクリーンショットが撮れて、新しいウィンドウに表示されるよ&lt;/b&gt;。これは便利！&lt;br&gt;&lt;br&gt;&#13;
ココナラのサービスもだけど、こんなアプリが簡単に書けちゃうなんてかっこいいよね～
</description>
      <dc:subject>お役立ちアプリ</dc:subject>
    </item>
    <item>
      <title>Julia でヒストグラム</title>
      <link>https://marusu.asablo.jp/blog/2016/02/02/8007232</link>
      <guid>https://marusu.asablo.jp/blog/2016/02/02/8007232</guid>
      <pubDate>Tue, 02 Feb 2016 19:30:44 +0900</pubDate>
      <dcterms:modified>2016-02-02T14:57:08+09:00</dcterms:modified>
      <dcterms:created>2016-02-02T12:54:38+09:00</dcterms:created>
      <description>話は前後するが、Julia でヒストグラム表示をやってみたのでメモ&lt;br&gt;&lt;br&gt;&#13;
イメージの読み出しが load() になった。読み出すと Image 構造体に読み込まれるので、その中から data() で画像データのみを取り出す。取り出した data は、RGB 構造体の配列なので、reinterpret () で UInt8 の配列に変換する。これで、3 x 横 x 縦 サイズの UInt8 の配列に取り出せる。&lt;br&gt;&#13;
さらに、RGB に分離する。前記 UInt8 配列のうち、１次元目はR/G/B をあらわしているので、R のみ取り出すには [1,:,:] を指定する。このままでは３次元の配列なので２次元にするために、先頭の次元を squeze で削除する。これでやっと２次元の R が取り出せる。（結構面倒くさい）&lt;br&gt;&lt;br&gt;&#13;
続いてヒストグラム生成。２次元のままだと（所望の）ヒストグラムが取れないので、reshape で１次元に並び替える。squeeze とは違うので注意（前述の次元削除も reshape で出来ないこともないけど）。&lt;br&gt;&#13;
これでやっとヒストグラムが取れる。hist(v, e) の書式で、v はヒストグラムを取るベクトル（１次元の配列）。e は幅指定で、-1:255 で 0から255の範囲をヒストグラム化。1番目の範囲は、-1より大きく、0以下。255番目の範囲は245より大きく、255以下が含まれる。&lt;br&gt;&#13;
ちなみに、-1:16:255 でヒストグラムの幅を16ずつとかに出来る。edge と 分布が返ってくる。&lt;br&gt;&lt;br&gt;&#13;
ヒストグラムが出来たので、グラフに描いてみる。ここでは、描画パッケージとして Winston を使用。&lt;br&gt;&#13;
Histogram() でグラフのオブジェクトを作成、FramedPlot() は、描画用のウィンドウの作成。add() で、ウィンドウにグラフオブジェクトを追加。これでヒストグラムが表示される。&lt;br&gt;&lt;br&gt;&#13;
やってみてわかったのだが、UInt8 のまま hist() を呼ぶと動作がおかしい。*　1.0 で Float64 に変換しているのはそのため。理由は不明・・・&lt;br&gt;&#13;
UInt8 のままで画像処理をするといろいろ面倒なので、最初に RGB 変換時に Float に変換したほうがいいかも知れない。&lt;br&gt;&lt;br&gt;&#13;
&lt;pre&gt;&lt;code&gt;# image 読み込み&#13;
using Images&#13;
img= reinterpret(UInt8,data(load("SleepingCat.bmp")))&#13;
red  = squeeze(img[1,:,:], 1)&#13;
green= squeeze(img[2,:,:], 1)&#13;
blue = squeeze(img[3,:,:], 1)&#13;
&#13;
# Histogram 生成&#13;
data1d= reshape(green, length(green)) * 1.0&#13;
(edges, counts)= hist(data1d, -1:255)&#13;
&#13;
# Winston の機能&#13;
using Winston&#13;
h= Histogram(edges, counts)&#13;
p= FramedPlot()&#13;
add(p, h)&lt;/code&gt;&lt;/pre&gt;
</description>
      <enclosure url="https://marusu.asablo.jp/blog/img/2016/02/02/3f47f9.png" length="17167" type="image/png"/>
      <dc:subject>Julia</dc:subject>
      <dc:subject>画像処理</dc:subject>
    </item>
    <item>
      <title>Julia で２進数、１６進数</title>
      <link>https://marusu.asablo.jp/blog/2016/01/15/7991062</link>
      <guid>https://marusu.asablo.jp/blog/2016/01/15/7991062</guid>
      <pubDate>Fri, 15 Jan 2016 19:16:40 +0900</pubDate>
      <dcterms:modified>2016-01-15T16:40:14+09:00</dcterms:modified>
      <dcterms:created>2016-01-15T16:31:41+09:00</dcterms:created>
      <description>久しぶりに Julia に関してのメモ&lt;br&gt;&lt;br&gt;&#13;
データ圧縮関係の処理をしようと思い、２進数や１６進数変換を調べたが、意外と書かれている情報が少ない。&lt;br&gt;&#13;
http://julialang.org や http://rosettacode.org/ あたりを見てまとめたのでメモしておく。&lt;br&gt;&lt;br&gt;&#13;
１０進数や１６進数の文字列に変換するには、C言語と同じ感じで @sprintf() で出来る。２進数への変換はこれではできないが、関数 bin() が用意されている。dec()、hex() もあるので、これを使ったほうが見やすいかも。&lt;br&gt;&#13;
文字列から数値への変換は、parse() という関数が用意されている。引数に "0b00110010"や "0x32" と書いてもいいし、何進数かを示す数値を付加してもいい。&lt;br&gt;&#13;
まとめると下記のとおり。&lt;br&gt;&#13;
（８進数もあるけど使わないので省略・・・）&lt;br&gt;&lt;br&gt;&#13;
&#13;
&lt;code&gt;&#13;
&lt;table border="1" cellpadding="1" cellspacing="1" style="width:500px;"  align="center"&gt;&lt;tbody&gt;&#13;
&#13;
&lt;tr&gt;&lt;td&gt;&lt;td&gt;２進数&lt;td&gt;１０進数&lt;td&gt;１６進数&lt;/td&gt;&lt;/tr&gt;&#13;
&#13;
&lt;tr&gt;&lt;td&gt;定数&lt;td&gt;a= 0b110010&lt;td&gt;a= 50&lt;td&gt; a=0x32&lt;/td&gt;&lt;/tr&gt;&#13;
&#13;
&lt;tr&gt;&lt;td&gt;定数から変換&lt;td&gt;bin(a)&lt;td&gt;dec(a)&lt;br&gt;@sprintf("%d",a)&lt;td&gt;hex(a)&lt;br&gt;@sprintf("%x",a)&lt;/td&gt;&lt;/tr&gt;&#13;
&#13;
&lt;tr&gt;&lt;td&gt;長さ指定&lt;td&gt;bin(a,16)&lt;td&gt;dec(a,4)&lt;br&gt;@sprintf("%04d",a)&lt;td&gt;hex(a,4)&lt;br&gt;@sprintf("%04x",a)&lt;/td&gt;&lt;/tr&gt;&#13;
&#13;
&lt;tr&gt;&lt;td&gt;文字列から定数へ&lt;td&gt;parse(Int16,"0b110010")&lt;br&gt;parse(Int16,"110010",2)&lt;td&gt;parse(Int16,"50")&lt;br&gt;parse(Int16,"50",10)&lt;td&gt;parse(Int16,"0x32")&lt;br&gt;parse(Int16,"32",16)&lt;/td&gt;&lt;/tr&gt;&#13;
&#13;
&lt;/tbody&gt;&lt;/table&gt;&#13;
&lt;/code&gt;&#13;
&lt;br&gt;&#13;
文字列に関しても分かってきたので、そのうち書く予定。
</description>
      <dc:subject>Julia</dc:subject>
    </item>
    <item>
      <title>CVC 実行方法と処理速度</title>
      <link>https://marusu.asablo.jp/blog/2015/08/27/7752694</link>
      <guid>https://marusu.asablo.jp/blog/2015/08/27/7752694</guid>
      <pubDate>Thu, 27 Aug 2015 18:38:28 +0900</pubDate>
      <dcterms:modified>2015-08-27T18:45:31+09:00</dcterms:modified>
      <dcterms:created>2015-08-27T18:22:48+09:00</dcterms:created>
      <description>CVC をコンパイルしたので、これを使ってシミュレーションしてみる。&lt;br&gt;&#13;
CVC には、インタープリターモードとコンパイルモードがある。&lt;br&gt;&#13;
&#13;
&lt;br&gt;&lt;b&gt;インタープリターモード&lt;/b&gt;(+interp)&lt;br&gt;&#13;
・すぐに実行&lt;br&gt;&#13;
・途中で止められる&lt;br&gt;&#13;
・止まった時点でのレジスタ値、メモリ値などが見られる&lt;br&gt;&#13;
・続きから実行できる&lt;br&gt;&#13;
&lt;br&gt;&lt;b&gt;コンパイルモード&lt;/b&gt;&lt;br&gt;&#13;
・コンパイルして実行ファイルが出来る→実行&lt;br&gt;&#13;
・途中で止めたら終わり&lt;br&gt;&lt;br&gt;&#13;
&#13;
それぞれ上のような特徴があるが、最も大きな違いは実行速度にある。&lt;br&gt;&#13;
コンパイルして実行する場合、&lt;b&gt;インタープリターモードで実行するよりも10倍速い。&lt;/b&gt;冗談ではなく、&lt;b&gt;10倍速い&lt;/b&gt;。&lt;br&gt;&#13;
コンパイルにかかる時間もわずかなので、インタープリターモードを使う意味はほとんどないと言えよう。内部のレジスタ値はVCDファイルにダンプしておけば見ることが出来るし。&lt;br&gt;&#13;
試しにちょっと実行とか、ちょっと文法チェックなどの場合くらいしか使い道がないだろう。もちろん、時間のかからないシミュレーションであれば、インタープリターモードだけでも十分ではあるが。&lt;br&gt;&lt;br&gt;&#13;
主要な実行フラグを示しておく&#13;
&lt;table border="1" cellpadding="1" cellspacing="1" style="width:500px;"&gt;&lt;tbody&gt;&#13;
&lt;tr&gt;&lt;td&gt;&lt;td&gt;基本型&lt;td&gt;cvc64 mytest.v&lt;td&gt;mytest.v をコンパイルし、cvcsimという実行ファイルが出来る&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;-f&lt;td&gt;入力ファイルリスト指定&lt;td&gt;cvc64 -f mylist.txt&lt;td&gt;Verilogファイルを列挙したテキストファイルを使用&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;-o&lt;td&gt;出力ファイル名指定&lt;td&gt;cvc64 -o mytest mytest.v&lt;td&gt;この場合、mytest という実行ファイルが出来る&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;-O&lt;td&gt;最適化&lt;td&gt;cvc64 -O mytest.v&lt;td&gt;コンパイル時間が伸びるが実行は速くなる&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;+2state&lt;td&gt;2値処理&lt;td&gt;cvc64 +2state mytest.v&lt;td&gt;内部処理を4値(0/1/x/z)ではなく2値(0/1)で行う&lt;br&gt;若干速くなる&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;+nbaopt&lt;td&gt;ノンブロッキング最適化&lt;td&gt;cvc64 +nbaopt mytest.v&lt;td&gt;ノンブロッキング代入直前の遅延を無視して高速化&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;+dumpvars&lt;td&gt;VCD出力&lt;td&gt;cvc64 +dumpvars mytest.v&lt;td&gt;内部ノードをVCDファイルに出力&lt;br&gt;Verilogファイルの変更は不要&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;/tbody&gt;&lt;/table&gt;&#13;
&lt;br&gt;&#13;
詳細は、&#13;
&lt;a href=http://www.tachyon-da.com/cvc-resources/&gt;&#13;
http://www.tachyon-da.com/cvc-resources/&lt;/a&gt; の Quick Start Guide を参照のこと。&lt;br&gt;&#13;
&lt;br&gt;&#13;
試しにシミュレーションにかかった時間を比較してみる。&lt;br&gt;&#13;
詳しくは明かせないが、ちょっとしたIP&#13;
&lt;table border="1" cellpadding="1" cellspacing="1" style="width:500px;"&gt;&lt;tbody&gt;&#13;
&lt;tr&gt;&lt;td&gt;mode&lt;td&gt;flag&lt;td&gt;分:秒&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;インタープリタモード&lt;td&gt;+interp&lt;td&gt;40:29&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;コンパイルモード&lt;td&gt;&lt;td&gt;3:36&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;コンパイルモード&lt;td&gt;-O&lt;td&gt;3:33&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;コンパイルモード&lt;td&gt;+2state&lt;td&gt;3:03&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;(参考)Cadence IES&lt;td&gt;&lt;td&gt;1:15&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;/tbody&gt;&lt;/table&gt;&#13;
&#13;
&lt;br&gt;&#13;
Verilator にちょっと古いベンチマークがあるが、だいたい合っている感じ。&lt;br&gt;&#13;
&lt;a href=http://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks&gt;&#13;
http://www.veripool.org/wiki/veripool/Verilog_Simulator_Benchmarks&#13;
&lt;/a&gt;&lt;br&gt;&#13;
以上。
</description>
      <dc:subject>verilog</dc:subject>
    </item>
    <item>
      <title>CVC verilog simulator コンパイル</title>
      <link>https://marusu.asablo.jp/blog/2015/08/26/7750873</link>
      <guid>https://marusu.asablo.jp/blog/2015/08/26/7750873</guid>
      <pubDate>Wed, 26 Aug 2015 18:53:47 +0900</pubDate>
      <dcterms:modified>2015-09-01T23:39:12+09:00</dcterms:modified>
      <dcterms:created>2015-08-26T15:48:47+09:00</dcterms:created>
      <description>Verilog のシミュレータでCVCというのを見つけた。&lt;br&gt;&#13;
&lt;a href=http://www.tachyon-da.com/&gt;http://www.tachyon-da.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&#13;
個人的には Veritak が使いやすくていいのだが、System Verilog には未対応だし、大きなシミュレーションは難しい。（SystemVerilog対応版も菅原さんが地道に開発を進められている）&lt;br&gt;&#13;
フリーソフトでは、icarus が有名だが、いかんせんシミュレーションが遅い。&lt;br&gt;&#13;
Verilator は速いみたいだけど、最上位をC++で書かないといけないし、ちょっと癖がありすぎる感じ。まあ、一番上は、クロックとリセット、終了判断だけにして決まった記述にすればいいのでチャレンジしようかと思っていた矢先ではあるが・・・&lt;br&gt;&lt;br&gt;&#13;
とりあえず、CVCをダウンロードしてインストール（というかコンパイル）してみたのでメモに残す。&lt;br&gt;&lt;br&gt;&#13;
環境は、CentOS7 (minimal)。&lt;br&gt;&lt;br&gt;&#13;
0) まずは、必要なパッケージの準備。&lt;br&gt;&#13;
　ダウンロードしたファイルを解凍するための bzip2、コンパイルのための make と gcc、CVC が使用する zlib をインストール。&#13;
&lt;pre&gt;&#13;
&lt;code&gt;yum install bzip2&#13;
yum install make&#13;
yum install gcc&#13;
yum install zlib zlib-devel&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
make するときに、カレントディレクトリを参照できるように、パスを追加。&#13;
&lt;pre&gt;&#13;
&lt;code&gt;PATH=$PATH:.&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
これでコンパイルの準備完了。&lt;br&gt;&lt;br&gt;&#13;
1) 適当なディレクトリにファイルをダウンロード&lt;br&gt;&#13;
　open_src_cvc_700c_tar.bz2 というファイル名だった。&lt;br&gt;&lt;br&gt;&#13;
2) ファイルを展開&#13;
&lt;pre&gt;&#13;
&lt;code&gt;tar xvf open_src_cvc_700c_tar.bz2&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
　open-src-cvc-700c というディレクトリが出来る。&lt;br&gt;&lt;br&gt;&#13;
3) open-src-cvc-700c/src に移動して&#13;
make する&#13;
&lt;pre&gt;&#13;
&lt;code&gt;cd open-src-cvc-700c/src&#13;
make -f makefile.cvc64&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
　問題なければ、src ディレクトリに cvc64 という実行ファイルが生成される。&lt;br&gt;&lt;br&gt;&#13;
4) 動作確認&lt;br&gt;&#13;
　検証用のシミュレーションを通してみる。&lt;br&gt;&#13;
　cvc64 を /tmp ディレクトリにコピーして、open_src_cvc_700c/tests_and_examples/install.test ディレクトリにある inst_test.sh と inst_test_interp.sh を実行&#13;
&lt;pre&gt;&#13;
&lt;code&gt;cp cvc64 /tmp&#13;
cd ../tests_and_examples/install.test&#13;
inst_test.sh cvc64&#13;
inst_test_interp.sh cvc64&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
2つのテストでそれぞれ&lt;br&gt;&#13;
&gt;&gt;&gt;&gt; Install test completed (this should be only message printed).&lt;br&gt;&#13;
と表示されれば成功。&lt;br&gt;&#13;
inst_test_interp.sh は、インタープリターモードなので時間がかかる。ちなみに引数の cvc64 は、ファイル名ではなく単なるフラグらしい。&lt;br&gt;&#13;
最終的に必要なのは、この cvc64 という実行ファイルだけ。パスの通った適当なディレクトリに置いておけばいい。&lt;br&gt;&lt;br&gt;&#13;
詳細は、&lt;a href=http://www.tachyon-da.com/cvc-resources/&gt;http://www.tachyon-da.com/cvc-resources/&lt;/a&gt;を参照のこと。
</description>
      <dc:subject>verilog</dc:subject>
    </item>
    <item>
      <title>julia - bicubic</title>
      <link>https://marusu.asablo.jp/blog/2015/06/18/7671538</link>
      <guid>https://marusu.asablo.jp/blog/2015/06/18/7671538</guid>
      <pubDate>Thu, 18 Jun 2015 19:51:00 +0900</pubDate>
      <dcterms:modified>2015-06-18T22:54:47+09:00</dcterms:modified>
      <dcterms:created>2015-06-18T20:12:53+09:00</dcterms:created>
      <description>バイキュービックの計算には、16画素のデータそれぞれに対する係数を求める必要がある。&lt;br&gt;&lt;br&gt;&#13;
求める画素位置と、実際の画素の位置から、画素間の距離を求め、その距離に応じた係数をそれぞれの画素の輝度値に掛け、その総和を求める画素の輝度値とする。&lt;br&gt;&#13;
ここで、距離と係数の関係は sinc 関数を３次近似したものが使われる。&lt;br&gt;&#13;
上の画像のピンクの線が sinc 関数で、下の緑と青が近似した値である。見やすくするために sinc 関数は上に0.5だけ移動してある。&lt;br&gt;&#13;
ちなみに、sinc 関数とは sin(πx)/(πx) のこと。&lt;br&gt;&lt;br&gt;&#13;
この部分を関数にするとこんな感じ。&#13;
&lt;pre&gt;&lt;code&gt;function fsinc(d)&#13;
	return (d &lt; 1) ? d^3 - 2d^2 + 1 : (d &lt; 2) ? -d^3 + 5d^2 - 8d + 4 : 0&#13;
end&lt;/code&gt;&lt;/pre&gt;&#13;
実は julia には sinc 関数があるので、別の名前にした。&lt;br&gt;&lt;br&gt;&#13;
x方向、y方向、それぞれ独立に係数を求め、掛け合わせることで16個の係数を求める。（試しに xy両方を含めた距離で計算してみたが、ノイズっぽい画像になってしまった）&lt;br&gt;&lt;br&gt;&#13;
x方向だけ考えると、求める画素の位置は、４つの画素の真ん中にくる。&lt;br&gt;&#13;
x値を小さい順に x1, x2, x3, x4 と置くと、求める画素の位置(x)は x2≦x＜x3 となり、x2= floor(x) である。&lt;br&gt;&#13;
よって、x と x2 の距離は x - floor(x) であり、x と x1 の距離は x と x2 の距離に１を足したものである。&lt;br&gt;&#13;
また、x と x3 の距離は、１から(x と x2 の距離)を引いたものとなり、x と x4 の距離はそれに１を足したものである。&lt;br&gt;&#13;
よって、x と x2 の距離（すなわち、x - floor(x) ）を xd とすれば、それぞれ xd+1, xd, 1-xd, 2-xd となる。&lt;br&gt;&#13;
y に関しても同様。&lt;br&gt;&lt;br&gt;&#13;
これを関数で書くと以下のようになる。&#13;
&lt;pre&gt;&lt;code&gt;function getCOEFFS (xin, yin)&#13;
	# coefficient (a= -1)&#13;
	function fsinc(d)&#13;
		return (d &lt; 1) ? d^3 - 2d^2 + 1 : (d &lt; 2) ? -d^3 + 5d^2 - 8d + 4 : 0&#13;
	end&#13;
	# calc coefficients&#13;
	xd= xin - floor(xin)&#13;
	xc= map(x -&gt; fsinc(x), [xd+1; xd; 1-xd; 2-xd])&#13;
	#&#13;
	yd= yin - floor(yin)&#13;
	yc= map(x -&gt; fsinc(x), [yd+1 yd 1-yd 2-yd])&#13;
	#&#13;
	return xc * yc&#13;
end&lt;/code&gt;&lt;/pre&gt;&#13;
関数の中に関数が書けるのは便利。&lt;br&gt;&#13;
map を使って、行列の距離値を sinc 関数を使った係数に変換している。&lt;br&gt;&lt;br&gt;&#13;
xc は、4行１列の行列。yc は、１行４列の行列。&lt;br&gt;&#13;
これらを掛け合わせると、４行４列の行列が得られる。これを戻り値にしている。&lt;br&gt;&lt;br&gt;&#13;
完成した関数は以下のとおり。&#13;
&lt;pre&gt;&lt;code&gt;# ibuff の (xin,yin) から画素値を取得する&#13;
function imgpic (ibuff, xin, yin)&#13;
&#13;
	# get 4x4 pixels&#13;
	function getPIX4x4 (ibuff, xin, yin)&#13;
		xstart= ifloor(xin) - 1&#13;
		ystart= ifloor(yin) - 1&#13;
		try&#13;
			return ibuff[xstart:(xstart+3), ystart:(ystart+3)]&#13;
		catch	# out of range&#13;
			obuff= ibuff[1:4,1:4]&#13;
			(xmax,ymax)= size(ibuff)&#13;
			for x= 1:4, y= 1:4&#13;
				xin= xstart + (x - 1)&#13;
				yin= ystart + (y - 1)&#13;
				xin= (xin &lt; 1) ? 1 : (xin &gt; xmax) ? xmax : xin&#13;
				yin= (yin &lt; 1) ? 1 : (yin &gt; ymax) ? ymax : yin&#13;
				obuff[x,y]= ibuff[xin,yin]&#13;
			end&#13;
			return obuff&#13;
		end&#13;
	end&#13;
&#13;
	# get 4x4 coefficients&#13;
	function getCOEFFS (xin, yin)&#13;
		# coefficient (a= -1)&#13;
		function fsinc(d)&#13;
			return (d &lt; 1) ? d^3 - 2d^2 + 1 : (d &lt; 2) ? -d^3 + 5d^2 - 8d + 4 : 0&#13;
		end&#13;
		# calc coefficients&#13;
		xd= xin - floor(xin)&#13;
		xc= map(x -&gt; fsinc(x), [xd+1; xd; 1-xd; 2-xd])&#13;
		#&#13;
		yd= yin - floor(yin)&#13;
		yc= map(x -&gt; fsinc(x), [yd+1 yd 1-yd 2-yd])&#13;
		#&#13;
		return xc * yc&#13;
	end&#13;
&#13;
	pixels= getPIX4x4(ibuff, xin, yin)&#13;
	coeffs= getCOEFFS(xin, yin)&#13;
&#13;
	return sum(pixels .* coeffs) / sum(coeffs)&#13;
&#13;
end&lt;/code&gt;&lt;/pre&gt;
</description>
      <enclosure url="https://marusu.asablo.jp/blog/img/2015/06/18/3a65ed.png" length="5457" type="image/png"/>
      <dc:subject>Julia</dc:subject>
      <dc:subject>画像処理</dc:subject>
    </item>
    <item>
      <title>julia - 拡大・縮小</title>
      <link>https://marusu.asablo.jp/blog/2015/06/12/7667298</link>
      <guid>https://marusu.asablo.jp/blog/2015/06/12/7667298</guid>
      <pubDate>Fri, 12 Jun 2015 18:14:55 +0900</pubDate>
      <dcterms:modified>2015-06-16T16:33:11+09:00</dcterms:modified>
      <dcterms:created>2015-06-12T16:43:06+09:00</dcterms:created>
      <description>フィルター処理だけであれば、imfilter で簡単に行うことが出来る。&lt;br&gt;&#13;
今回は、画像の拡大・縮小の処理を行ってみる。&lt;br&gt;&#13;
最終的には、imgzoom( img, xsize, ysize) という関数で、画像を拡大・縮小できるようにしたい。&lt;br&gt;&lt;br&gt;&#13;
&#13;
任意サイズに画像を拡大・縮小する場合、画素の補間が必要となる。&lt;br&gt;&#13;
ここでは、bicubic 法で補完を行う。&lt;br&gt;&#13;
バイキュービックでは、周辺の16画素を用いて補完を行う。この際には、補完係数に３次関数を用いるので cubic と呼ばれるようだ。ちなみに、この補完係数は、sinc関数を３次近似したものらしい。&lt;br&gt;&lt;br&gt;&#13;
&#13;
ということで、(x,y) の周辺16画素を取得する関数をまずは作ってみる。&lt;br&gt;&#13;
簡単に書けばこんな感じか。&lt;br&gt;&#13;
&lt;pre&gt;&lt;code&gt;function getPIX4x4 (img, x, y)&#13;
	xstart= ifloor(x) - 1&#13;
	ystart= ifloor(y) - 1&#13;
	return img[xstart:(xstart+3), ystart:(ystart+3)]&#13;
end&lt;/code&gt;&lt;/pre&gt;&#13;
ただし、これだと、x=1 の時（左端）や右端の時に img の添え字をはみ出してしまうので、x, y の値のチェックが必要。&lt;br&gt;&#13;
しかし、これを毎回行うのは効率的ではないので、エラーが発生した時だけ真面目に処理をするようにした。（ちょっとだけ早い）&lt;br&gt;&#13;
&lt;pre&gt;&lt;code&gt;function getPIX4x4 (img, xin, yin)&#13;
	xstart= ifloor(xin) - 1&#13;
	ystart= ifloor(yin) - 1&#13;
	try&#13;
		return img[xstart:(xstart+3), ystart:(ystart+3)]&#13;
	catch&#13;
		buff= img[1:4,1:4]&#13;
		(xmax,ymax)= size(img)&#13;
		for x= 1:4, y= 1:4&#13;
			xpos= xstart + (x - 1)&#13;
			ypos= ystart + (y - 1)&#13;
			xpos= (xpos &lt; 1) ? 1 : (xpos &gt; xmax) ? xmax : xpos&#13;
			ypos= (ypos &lt; 1) ? 1 : (ypos &gt; ymax) ? ymax : ypos&#13;
			buff[x,y]= img[xpos,ypos]&#13;
		end&#13;
		return buff&#13;
	end&#13;
end&#13;
&lt;/code&gt;&lt;/pre&gt;&#13;
try ブロックを処理中にエラーが生じると catch ブロックに処理が移る。&lt;br&gt;&#13;
とりあえず今日はここまで。
</description>
      <enclosure url="https://marusu.asablo.jp/blog/img/2015/06/12/3a4460.png" length="16707" type="image/png"/>
      <dc:subject>Julia</dc:subject>
      <dc:subject>画像処理</dc:subject>
    </item>
    <item>
      <title>julia - BMP の読み書き</title>
      <link>https://marusu.asablo.jp/blog/2015/06/05/7662620</link>
      <guid>https://marusu.asablo.jp/blog/2015/06/05/7662620</guid>
      <pubDate>Fri, 05 Jun 2015 17:36:43 +0900</pubDate>
      <dcterms:modified>2015-12-19T14:05:51+09:00</dcterms:modified>
      <dcterms:created>2015-06-05T14:46:06+09:00</dcterms:created>
      <description>Images のパッケージが大幅に変更されました。&lt;br&gt;&#13;
imread(), imwrite() は、それぞれ load(), save() に変わりました。&lt;br&gt;&#13;
機会があれば対応したものを執筆しますが、混乱を避けるため、とりあえず消しておきます。(2015/12/19)&lt;br&gt;&lt;br&gt;&#13;
&#13;
&lt;strike&gt;&#13;
画像処理をするために、BMPファイルの読み書きをやってみた。&lt;br&gt;&#13;
Pkg.add("Images") でパッケージを追加。&lt;br&gt;&#13;
入出力には ImageMagick を使用しているらしい。&lt;br&gt;&#13;
以下、ちょっとしたコード。&lt;br&gt;&#13;
&lt;pre&gt;&#13;
&lt;code&gt;# Images パッケージを使用する宣言&#13;
using Images&#13;
# sample.bmp を読み込む&#13;
img1= imread("sample.bmp")&#13;
# 白黒画像に変換&#13;
img1= convert(Image{Gray}, img1)&#13;
# sobel filter の係数を取得。2つの行列を返してくる&#13;
sobelX, sobelY= sobel()&#13;
# X方向の sobel filter を適用&#13;
img1= imfilter(img1, sobelX)&#13;
# 結果をファイルに書き込む&#13;
imwrite(colorim(img1), "edgeX.bmp")&lt;/code&gt;&#13;
&lt;/pre&gt;&#13;
&lt;br&gt;RGB Image 構造体&#13;
&lt;pre&gt;&lt;code&gt;img1= imread("sample.bmp")&lt;/code&gt;&lt;/pre&gt;&#13;
評価値&#13;
&lt;pre&gt;&lt;code&gt;RGB Image with:&#13;
  data: 1280x720 Array{RGB{UfixedBase{Uint8,8}},2}&#13;
  properties:&#13;
    IMcs: sRGB&#13;
    spatialorder:  x y&#13;
    pixelspacing:  1 1&lt;/code&gt;&lt;/pre&gt;&#13;
&#13;
ピクセルデータには、img1.data[100,100].r のようにしてアクセスできる。&lt;br&gt;&#13;
ちなみに、data は省略できて、img1[100,100].r でも同じ。&lt;br&gt;&#13;
ただし、img1[:,:].r のように範囲指定はできない。&lt;br&gt;&#13;
構造体の properties は、img1["IMcs"] のように指定する。&lt;br&gt;&lt;br&gt;&#13;
&#13;
RGB それぞれを行列として扱いたい場合には、red(), green(), blue() という関数で分離できる&lt;br&gt;&#13;
&lt;pre&gt;&lt;code&gt;imgR= red  (img1)&#13;
imgG= green(img1)&#13;
imgB= blue (img1)&lt;/code&gt;&lt;/pre&gt;&#13;
これで imgR,imgG,imgB は、行列となるので、普通に計算などができる。&lt;br&gt;&#13;
imread で読み込んだ場合、この行列は、各画素 0 から 1 の値となる。&lt;br&gt;&#13;
255 を掛けると元の BMP のピクセル値に一致する。&lt;br&gt;&lt;br&gt;&lt;br&gt;&#13;
Image 構造体を作る&lt;br&gt;&lt;br&gt;&#13;
行列から Image 構造体を作るには、grayim(),colorim()関数を使う。&lt;br&gt;&#13;
grayim() は、m x n の行列からグレースケールの Gray Image 構造体を作る。&lt;br&gt;&#13;
colorim() は、3 x m x n の行列が必要。RGB から直接変換する方法は不明。&lt;br&gt;&#13;
とりあえず、この大きさの行列を作って、RGB 値を代入すれば使える。&lt;br&gt;&lt;br&gt;&lt;br&gt;&#13;
まとめ&#13;
&lt;pre&gt;&lt;code&gt;using Images&#13;
&#13;
# sample.bmp 読み出し&#13;
img1= imread("sample.bmp")&#13;
# RGB に分離&#13;
imgR= red  (img1)&#13;
imgG= green(img1)&#13;
imgB= blue (img1)&#13;
# Gray を作ってみる&#13;
imgW= imgR * 0.29 + imgG * 0.60 + imgB * 0.11&#13;
imwrite(grayim(imgW), "gray.bmp")&#13;
# RGB Image 構造体に戻す&#13;
imgRGB= zeros(3, size(imgR,1), size(imgR,2))&#13;
imgRGB[1,:,:]= imgR&#13;
imgRGB[2,:,:]= imgG&#13;
imgRGB[3,:,:]= imgB&#13;
imwrite(colorim(imgRGB), "rgb.bmp")&lt;/code&gt;&lt;/pre&gt;&#13;
&lt;/strike&gt;
</description>
      <dc:subject>Julia</dc:subject>
      <dc:subject>画像処理</dc:subject>
    </item>
    <item>
      <title>julia - 代入</title>
      <link>https://marusu.asablo.jp/blog/2015/06/04/7662068</link>
      <guid>https://marusu.asablo.jp/blog/2015/06/04/7662068</guid>
      <pubDate>Thu, 04 Jun 2015 18:46:25 +0900</pubDate>
      <dcterms:modified>2015-06-07T08:50:42+09:00</dcterms:modified>
      <dcterms:created>2015-06-04T18:51:49+09:00</dcterms:created>
      <description>引き続き、Julia の基本的なことについてのまとめ&lt;br&gt;&lt;br&gt;&#13;
変数への代入について&lt;br&gt;&lt;br&gt;&#13;
    &lt;table align="center" border="1" cellpadding="1" cellspacing="1"&gt;&#13;
      &lt;tbody&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            入力値&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            評価値&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            備考&lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            x= 3.0 + 2.0im&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            3.0 + 2.0im&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              虚数単位は、i ではなく im&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              im の前に空白はダメ&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              x= 3.0 + 2.0 * im なら OK&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            x= &amp;pi;&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &amp;pi; = 3.1415926535897...&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              x= pi でも同じ&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              \pi と入れてタブを押すと&amp;pi;に変換される&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              内部的には定数型として扱われる&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            x= &amp;radic;3&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            1.7320508075688772&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              sqrt(3) でも同じ&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              \sqrt と入れてタブを押すと&amp;radic;に変換される&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              ちょっとやりすぎな感じ&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            y= &amp;radic;2sin(&amp;pi;/4)&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            1.189207115002721&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              y= sqrt(2*sin(pi/4)) のことらしい&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              見た目に惑わされてしまうので注意&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              x= 0:0.1:20&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              y= sin(x)&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;div&gt;&#13;
              201-element Array{Float64,1}:&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.0&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.0998334&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.198669&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.29552&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.389418&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.479426&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.564642&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.644218&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.717356&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.783327&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;⋮&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.247834&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.343315&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.435365&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.523066&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.60554&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.681964&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.751573&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.813674&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.867644&lt;/div&gt;&#13;
            &lt;div&gt;&#13;
              &amp;nbsp;0.912945&lt;/div&gt;&#13;
          &lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              x に、0 から 20 まで 0.1 刻みの範囲を指定&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              &amp;nbsp;&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              y には、それに対応した sin(x) が入る&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              一番上にあるグラフがそれ&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            s= &amp;quot;Hello world!&amp;quot;&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &amp;quot;Hello world!&amp;quot;&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            文字列はダブルクオーテーションでくくる&lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            f= sin&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            sin (generic function with 11 methods)&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              関数も変数に代入できる&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              y= f(3) として計算できる&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
        &lt;tr&gt;&#13;
          &lt;td&gt;&#13;
            sin= 5&lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              Warning: imported binding for sin overwritten in module Main&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              5&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
          &lt;td&gt;&#13;
            &lt;p&gt;&#13;
              関数名も変数として使えてしまう&lt;/p&gt;&#13;
            &lt;p&gt;&#13;
              でも、関数としては機能しなくなるので注意&lt;/p&gt;&#13;
          &lt;/td&gt;&#13;
        &lt;/tr&gt;&#13;
      &lt;/tbody&gt;&#13;
    &lt;/table&gt;&#13;
&lt;br&gt;&#13;
ツールを使ったので表の作成が簡単になった。
</description>
      <enclosure url="https://marusu.asablo.jp/blog/img/2015/06/04/3a164b.png" length="19855" type="image/png"/>
      <dc:subject>Julia</dc:subject>
    </item>
    <item>
      <title>julia - 変数の型</title>
      <link>https://marusu.asablo.jp/blog/2015/06/02/7660928</link>
      <guid>https://marusu.asablo.jp/blog/2015/06/02/7660928</guid>
      <pubDate>Tue, 02 Jun 2015 20:45:07 +0900</pubDate>
      <dcterms:modified>2015-06-07T08:50:57+09:00</dcterms:modified>
      <dcterms:created>2015-06-02T20:40:53+09:00</dcterms:created>
      <description>SciLab を使っていたけど、軽くて早い Julia というのを見つけたので使ってみる。&lt;br&gt;&#13;
&lt;a href=http://julialang.org&gt;http://julialang.org&lt;/a&gt;&lt;br&gt;&lt;br&gt;&#13;
&#13;
基本思想は MatLab に似ていて、データは行列のまま処理ができるので、画像処理やらデータ処理には便利そう。&lt;br&gt;&lt;br&gt;&#13;
&#13;
変数の型の指定は不要で、適当に割り当ててくれる。&lt;br&gt;&lt;br&gt;&#13;
&#13;
型についての簡単なまとめ&lt;br&gt;&#13;
&#13;
&lt;table border="3"&gt;&#13;
&lt;tr&gt;&#13;
&lt;th&gt;入力&lt;/th&gt;&#13;
&lt;th&gt;評価値&lt;/th&gt;&#13;
&lt;th&gt;型&lt;/th&gt;&#13;
&lt;th&gt;コメント&lt;/th&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= 3&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Int64&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= 3.0&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
3.0&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Float64&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= 1:3&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
1:3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;UintRange{Int64}&lt;/td&gt;&#13;
&lt;td&gt;範囲をあらわす表記&lt;br&gt;&#13;
行列からの切り出しや for ループなどで使う&#13;
&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= [1 2 3]&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
1 2 3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Array{Int64,2}&lt;/td&gt;&#13;
&lt;td&gt;&#13;
下の3つとは結果が違う&lt;br&gt;&#13;
1x3 の2次元行列になる&#13;
&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= [1,2,3]&lt;/td&gt;&#13;
&lt;td&gt;&lt;center&gt;&#13;
1&lt;br&gt;&#13;
2&lt;br&gt;&#13;
3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Array{Int64,1}&lt;/td&gt;&#13;
&lt;td&gt;(カンマで区切るのはよくないみたい)&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= [1;2;3]&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
1&lt;br&gt;&#13;
2&lt;br&gt;&#13;
3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Array{Int64,1}&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= [1:3]&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
1&lt;br&gt;&#13;
2&lt;br&gt;&#13;
3&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Array{Int64,1}&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= (1,2,3)&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
(1,2,3)&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;(Int64,Int64,Int64)&#13;
&lt;td&gt;Tuple型: 関数の引数部分&#13;
&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;tr&gt;&#13;
&lt;td&gt;x= [1 2 3; 4 5 6; 7 8 9]&lt;/td&gt;&#13;
&lt;td&gt;&#13;
&lt;center&gt;&#13;
1 2 3&lt;br&gt;&#13;
4 5 6&lt;br&gt;&#13;
7 8 9&#13;
&lt;/center&gt;&#13;
&lt;/td&gt;&#13;
&lt;td&gt;Array{Int64,2}&lt;/td&gt;&#13;
&lt;td&gt;3x3 行列&lt;/td&gt;&#13;
&lt;/tr&gt;&#13;
&lt;/table&gt;&#13;
&lt;/center&gt;&#13;
&lt;br&gt;&lt;br&gt;&#13;
表を作るのに疲れたのでここまで&lt;br&gt;&lt;br&gt;&#13;
[1,2,3] == [1;2;3] → true&lt;br&gt;&#13;
[1 2 3] == [1,2,3] → false
</description>
      <dc:subject>Julia</dc:subject>
    </item>
  </channel>
</rss>
