行列の計算の言語による違い

Rとjuliaとpythonとruby プログラム言語で数値計算をしようとするときに,行列を扱う必要がある場合がある.そのやり方が言語毎に特徴があるので,比較してみた.例として,行列を定義して,固有値を固有ベクトルを求めて,対角化を計算する場合について,やり方を見てみよう. まず,私が数値計算をするときによく使っているRでは,インストールするだけで,行列を使うことができる.逆行列を求めるコマンドがsolveである点と,行列の掛け算が%*%であることに注意すれば,簡単に使うことができる. a 次に,近年人気が出てきたjuliaであるが,これもインストールした時点で行列自体は使えて,さらにLinearAlgebraを組み込むことによって,固有値などの計算をすることができる. a=[1 2; 3 4] using LinearAlgebra r=eigen(a) r.values r.vectors inv(r.vectors)*a*r.vectors 数値計算の分野でもシェアを広げているpythonでは,numpyを使う必要がある.pipなどでこれをインストールできる.私の場合は,debianでaptitudeからpython3-numpyを入れた.numpyをimportして,linalgを使うと計算ができる.行列の掛け算がnp.dot()で書かないといけないのが面倒だったのだが,新しいversionでは@を使えるようになったようだ. import numpy as np a=np.array([[1,2],[3,4]]) r=np.linalg.eig(a) r[0] r[1] #np.dot(np.dot(np.linalg.inv(r[1]),a),r[1]) np.linalg.inv(r[1])@a@r[1] 最後にrubyであるが,数値計算は比較的苦手である.行列計算はnarrayを使えば良いのだが,固有値の計算などは困難である.そこで,numo-linalgというものを使ってみた.このインストールは少し手間取ったが,以下のようにしたらdebianにインストールすることができた. sudo apt install liblapacke libopenblas0 sudo apt install git ruby gcc ruby-dev rake make sudo gem install specific_install sudo gem specific_install https://github.com/ruby-numo/numo-narray.git sudo gem install numo-linalg -- --with-backend=openblas --with-openblas-lib=/usr/lib/x86_64-linux-gnu すると,numo/linalgをrequireしたら計算できるのだが,いちいちNumoと書くのが面倒なので,それをincludeした.narrayの場合には,NMatrixを定義すると,行列の積は*で書けるのだが,numoの場合には,numo-narrayのdotを使って書かないといけないのが面倒に感じた. require "
Read more...

Linuxのメモリ

DMIをdecode

PCでどのようなメモリを使っているかを,Linuxから知るにはどうしたら良いかを調べてみたら,

sudo dmidecode --type memory

とすると,現在搭載しているメモリの情報が得られるらしい.sizeやtypeはもちろん,part numberや,rankも調べることが出来るのは便利である.ECCかどうかは,total widthが72bitかどうかで判断するのかな.error correction typeというところにも書いてあるけど.

dmidecodeでprocessorを指定したら,CPUの情報も見れる.core数やクロックなども表示してくれるので,便利である.

Read more...

PGPかGPG

暗号化通信

暗号化通信としては,PGP(Pretty Good Privacy)が有名だったが,調べてみたら,GPG(Gnu PG)というのもあって,名前がややこしくなっていた.linuxには標準でGPGが入っているようなので,使い方を調べてみた.

まず,鍵のペアを作る.

gpg --gen-key

このとき,Real nameは五文字以上じゃないといけないが,emailは空欄でも良いし,復号のときに必要なpass phraseも不要なら適当で良いが空欄だと怒られた.-kオプションで実行すると,公開鍵の,-Kだと秘密鍵のリストが表示される.作った公開鍵をファイルに出力するには,

gpg -o pub.bin --export name

とする.別の公開鍵を読み込むには,

gpg --import keyfile

とする.公開鍵を削除するには,--delete-keyオプションを使う.暗号化するには,

gpg -e -r name file

とすると良い.このとき,file.gpgなどというファイルが出来るので,この状態で他の人に送ると良いだろう.復号化するには,

gpg file.gpg
で良い.この時,pass phraseが要求される.
Read more...