2008年11月25日

京都

などへ行ってきましたので。

なにやら大変疲れましたので、毎度のことながら続きはFlickrで

ところでFlickr、新しいセット作ろうとしたら「フリーは3つまでだこのやろー」とか言われたので金を払ってしまいました。 しかし円高の影響で月200円もいかないとゆー。

というわけで今この時点からオリジナルサイズの画像が閲覧可能になっております。

…といってもアップロードする時点のサイズなので基本的に50%のサイズになってるんだけど。 上げなおしても良いけどそれほどでもない気がするのでそのまんまUPは次回から。

posted by Rion778 at 00:15 | Comment(0) | TrackBack(0) | diary | このブログの読者になる | 更新情報をチェックする
2008年11月21日

時系列データのプロット[R] (「おんどとり」を例にした解説)

Rには日付・時間データをオブジェクトとして扱うための"POSIXlt"、"POSIXct"というクラスがある。例えば、Sys.time()関数を使うと現在の時間が"POSIXct"オブジェクトとして返ってくる。

> Sys.time()
[1] "2008-11-21 18:39:48 JST"

日時の情報は例えばデータロガーによって温度、湿度、二酸化炭素濃度などの環境要素の経時変化を観察するような場合に重要である。そこで、データロガーの出力する日時の情報をPOSIXctオブジェクトにでも変換して扱えればいいのだが、そのためには多少の作業が必要となる。

「おんどとり」というデータロガーがある。比較的安価で(といっても1台3万程度だが)温度・湿度情報を採取できるために研究・一般を問わず広く使われているデータロガーだ。「おんどとり」にはいくつか種類があるが、その中のある機種が吐き出すデータ(を付属ソフトで「カンマ区切りテキスト」に変換したもの)は次のような形式になっている。

"< Measurement Data Text Output >"
""
"Date/Time","@date()","ch.1","ch.2","ch.3","ch.4","ch.5","ch.6","ch.7","ch.8"
"","","゚C","゚C","","","","","",""
"2008/10/30 16:00'00","39751.6666666667","  20.8000","  20.4000","","","","","","",
"2008/10/30 16:20'00","39751.6805555556","  20.7000","  20.0000","","","","","","",
"2008/10/30 16:40'00","39751.6944444444","  20.4000","  19.4000","","","","","","",
"2008/10/30 17:00'00","39751.7083333333","  20.2000","  19.0000","","","","","","",
"2008/10/30 17:20'00","39751.7222222222","  19.9000","  18.6000","","","","","","",
"2008/10/30 17:40'00","39751.7361111111","  19.6000","  18.3000","","","","","","",
.
.
.

見づらいが、Excelで開くと見やすくなる。つまりExcel用である。

Rには直接関係無いが説明のためにちょっと詳しく見よう。

まず行を見ると、最初に余分な2行がついていて、3行目にデータのラベルが記述されている。そして4行目に採取したデータの単位が記述されており、その後に続くのがデータだ。

次に列を見る。左端の1列目は日時情報を可読性重視で出力している。そして2列目にある大きな数字だが、これはシリアル値と呼ばれるWindows特有の日時表現形式で、1900年1月1日0時を1としたときの経過日数となっている。ここで面倒なのがUNIX界(POSIX規約も同様)では同様に1970年1月1日を0とし、統計ソフトSASでは1960年1月1日を0とするような値によって日時を表現するということだ。要するにこのシリアル値というのはWindows専用、もっといえばExcel専用というわけ。実際、Excelで表示したときに書式を適当なものへ変更してやればこの値が正確に記録時刻を表す。が、とりあえずRでは使えない。使えないことも無いが、面倒なので使わない。で、3列目移行がデータとなっている。

さて、まずはデータを読み取ろう。データはRの作業ディレクトリに「data.csv」という名前で保存されているものとする。

mydata <- read.table("data.csv", skip=4, sep=",", header=F)
names(mydata) <- c("Date.Time", "d", "ch.1", "ch.2", "ch.3", "ch.4", "ch.5", "ch.6", "ch.7", "ch.8")

ここでは頭4行を飛ばして読んだあとに改めてラベルをつけなおしていることに注意。特に頭2行を読み込むと列数が合わなくてややこしいことになるので必ず飛ばさないといけない。

次に1列目のデータを利用してPOSIXltオブジェクトを作成する(読み込んだ時点では文字データになっている)。

attach(mydata)
x <- strptime(Date.Time, "%Y/%m/%d %H:%M'%S", tz="")

とりあえずattach()してデータを扱いやすく。

次にstrptime()関数が文字列をPOSIXltオブジェクトへ変換してくれる。一つ目の引数に文字列ベクトルを、2つ目の引数に文字列の書式を、3つ目にはタイムゾーン(普通は空で問題ない)を入れている。2つ目の書式設定が重要。「おんどとり」では"2008/10/30 17:40'00"といった具合なのでそれにあわせて"%Y/%m/%d %H:%M'%S"となる。もしこれが"2008年10月30日17時40分00秒"だったら、"%Y年%m月%d日%H時%M分%S秒"とやるわけだ。ちなみに、もし年の表記が2桁なら%yと小文字にする。

そうしたらこれを使ってプロットをしてみよう。今日の目標は時系列データをプロットすることだ。

普通にplot(x, ch.1)とかやってもいいけど、きっとx軸のラベルが気に入らないと思うので、最初プロットするときは空にしておいて後でPOSIXオブジェクト専用の軸を描く関数、axis.POSIXct()関数で追加するのがオススメ。とりあえず軸なしでグラフを書き上げる。

plot(x, ch.1, type="l", ylim=c(5,25),
	 xlab="Date", ylab="Air Temperature (℃)", xaxt="n")
lines(x, ch.2, col=2)
legend(locator(1), c("ch.1", "ch.2"), col=1:2, lty=c(1,1), box.lty=0)

X座標の値と位置の関係が分かりにくいので凡例の位置は上のようにlocator()で対話的に決めたほうが良いような気がする。他のデバイスへ出力したいときはあらかじめlocator()で調べておくしかない?一応今回使ったデータで適当にlocator()を実行した結果はこんな感じ。

> a <- locator()
> a
$x
[1] 1225740207 1226309024 1226763384

$y
[1]  9.146104  8.647322 24.699051

x軸のこの大きな値は何だろう?秒数?

で、次に軸を描く。ここが重要。といってもまあaxis.POSIXct()関数のヘルプをそのまんま和訳したようなもんですが。

r <- as.POSIXct(round(range(x), "days"))
axis.POSIXct(1, at=seq(r[1],r[2], by="1 week"), format="%d日 0時")

最初にrというオブジェクトに入れているのはデータの「端」を丸めたもの。ここで"days"に丸めるとちょうど0時になる。"hours"なら0分、"secs"なら0秒といった具合になる。これはプロットするときに最初の目盛りが入る位置になるので、データの長さや目的に応じて換えるといい。

そしてaxis.POSIXct()だ。状況に応じて変更すべきは真ん中のby="1 week"とformat="%d日 0時"の部分。by=""には目盛りを刻む間隔を入れる。sec, min, day, weekなどの単位をつけて時間の長さで指定する。先に"days"で丸めたからといって"1 day"より長くする必要は無い。format=""には目盛りのラベルをどのような書式で書くかを指定する。strptime()のときに使った%Y, %m, %dなどが使える。ここでは0時と直接書いたが、%Hでもいい。ただし「00時」という表記になる。

では完成品を。

datetimeplot.jpg

なんだかずいぶん長くなってしまったけれど作業量自体はたいしたことが無いので、あるいはExcelより楽かもしれない。それにExcelでは扱えないような量のデータも扱えるはず。それに各種の時系列解析も使えるハズ(やったことないけど)。

まあ見た目の問題はあるっちゃあるけど。プレゼンには向かない?

posted by Rion778 at 18:35 | Comment(1) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月17日

微分方程式とロジスティック式(2)

前回に引き続いてネズミの問題。 もう一回引用すると、

代数と三角関数は知っていたので、どんな数学の問題が出てきても解ける自信があった。 でもシュワブ先生は次のような問題を出してぼくをへこませようとしたんだ。あれから五〇年たった今でも、はっきりと思い出せる。 ネズミがネズミの人口に比例して死ぬとしたら、ネズミの人口はどれくらいかを求める問題だった。
ポール・ ホフマン「放浪の天才数学者エルデシュ」  p.164)

「ネズミがネズミの人口に比例して死ぬ」という一文の意味はよく考えないといけない。まず、

  • ネズミはネズミの人口に比例して増える

ということは書いてないがまあ当たり前だろうということで考慮する。

で、次に「人口に比例して死ぬ」というのをバカ正直に捕らえると前回解いた微分方程式と大差ない問題になる。 次のように解釈すれば問題が面白くなるし、より現実的でもある。

  • ネズミが死ぬ割合はネズミの人口に比例して増える

こう言ってもいい。「ネズミの増殖スピードはネズミの個体数によってブレーキがかけられる」

これを数式で表現すると次のようになる。

081117eq1

前回と同じくxは個体数、tは経過時間、そして増加速度にかかわる比例定数aに対し、xに比例したブレーキがかかる。

これを変数分離によって解こう。

まずは変数の分離。

081117eq2

左辺はそのままだと積分しにくいので、部分分数分解という作業をする。何をするのかというと、 分母が積の形になっていることを利用して、左辺の分数を和の形に変形する。 (この場合はちょっと試行錯誤したほうが楽な気もするけど手順もあるので気になる人は「部分分数」などのキーワードで検索を。)

081117eq3

もうちょい整理して積分。左辺は和の形なので項別の積分ということになる。

081117eq4

ちょっと難しいのは左辺第一項だろう。ほかは前回と同じなので。

∫f'(x)/f(x) dx = ln |f(x)| という式を知っていれば (1/xの積分と置換積分という方法を組み合わせれば簡単に証明できるので、気になって気持ち悪いという人は「1/x」「置換積分」 などのキーワードで検索を)、これは次のように計算できる。

081117eq5

ここで、変域が負の数に及んでしまうことに目をつぶれば絶対値記号を括弧に変えてしまえる。…あれ?いいんだろうか。

とにかく、そんな感じで積分を計算してしまうと、

081117eq6

対数の差は真数の商なので

081117eq7

で、対数を外す(x=a/bは定義できない…?結果から見ると定義できなくても問題ないけど)。Cの中身はちょいと変わる。

081117eq8

ここまで来たらあとは簡単な変形なのでちょっと省略して、

081117eq9

t=0でx=x0として求め たCを代入すると、

081117eq10

というわけで問題が解けた。

ここで解いた微分方程式はロジスティック式と呼ばれ、個体群増加のモデルなどに用いられる。

ロジスティック式は初期値がa/bよりも小さいときにロジスティック曲線と呼ばれる特徴的な曲線を描く。ためしにRで描いてみよう。

logistic <- function(t){
 a <- 1.5 #増加率
 b <- 0.3 #抑制力
 x0 <- 2 #初期個体数
 1/(b/a - (b/a - 1/x0)*exp(-a*t))
 }
curve(logistic, -5, 5, xlab="Time", ylab="logistic(Time)")
grid()

logistic

個体数は0よりも小さい値にはならず、またa/bよりも大きい値にはならない(a/bより大きな値を初期値に与えた場合は…)。 a/bは環境収容力といわれる。

うーん…

答えは間違ってないはずだけどどうも気になる点が。対数の変域が負に行くのはどう説明したらいいんだ?

それに気晴らしのために考えてたのに別に晴れてないしどうしたもんか。

posted by Rion778 at 02:26 | Comment(0) | TrackBack(0) | 勉強ノート | このブログの読者になる | 更新情報をチェックする

微分方程式とロジスティック式(1)

代数と三角関数は知っていたので、どんな数学の問題が出てきても解ける自信があった。 でもシュワブ先生は次のような問題を出してぼくをへこませようとしたんだ。あれから五〇年たった今でも、はっきりと思い出せる。 ネズミがネズミの人口に比例して死ぬとしたら、ネズミの人口はどれくらいかを求める問題だった。
ポール・ ホフマン「放浪の天才数学者エルデシュ」  p.164)

ポール・エルデシュの友人であるロン・グラハムが数学に興味をもつきっかけとなったのがこの問題だ。ちょっと解いてみよう。

が、その前にもうちょっと単純な問題を考えよう。「ネズミがネズミの人口に比例して増える」としたら、 ある時間後にネズミは何匹になるだろうか。(「微分方程式」の意味が分かる人は以下飛ばして次へ行ったほうがいい気がします。 行くべきです。下は飛ばしてー見ないでー。)

まず、ネズミの増殖速度と個体数の比例関係を数式で表そう。

081116eq1

ここでxは個体数、時間はt。個体数の変化を時間で微分したものが増殖速度、 そしてそれが適当な比例定数aによって個体数xと結び付けられている。これは微分を含む方程式なので微分方程式と呼ぶ。 これは特に変数分離形と呼ばれるものの最も簡単な例になっていて、適当な作業によって、xについての式に簡単に書きなおせる。

まずは変数を分離する。変数はxとtだ。これを左右に分別する作業を変数分離という。

081116eq2

dxやらdtやらも気にせず移動してしまう。

そして両辺を(不定)積分する。変数を整理しているので、左辺はxについての積分、右辺はtについての積分を考えることになる。

081116eq2_1

積分という作業がどういうものかを分かっていないとこのインテグラルの唐突感が気持ち悪い(僕がそうだった)が、 まあとにかく両辺にうにょっとインテグラルを書いてしまっておk。で、普通に積分記号からdx、dtまでの間にある式を不定積分する。

081116eq3

ここでCは積分定数で、右の積分で付くやつも左の積分で付くやつもまとめている。もうちょい整理する。

081116eq4

右辺ちょっとおかしいじゃないかと思うかもしれないが(僕がそうだった)、「積分定数」というのが 「面倒なものをまとめただけの入れ物」だと知っていれば納得できる。定数に定数掛けても定数なので、 まあ要するにaCを改めてCと書き直したということ。

左辺にln(自然対数。logと書く人もいるけど、lnと書いたほうが自然対数であることがはっきりする。)が付いている。 lnの意味を考えれば分かることだが、こいつは右辺をeの指数部にしてやると外れる。

081116eq5

また右辺がちょっとおかしいじゃないかと思うかもしれないが(僕が(ry )、ここでのCというのはe^Cを書き直したものだ。 e^C*e^at=e^(at+C)というわけだ。定数の定数乗はやっぱり定数なのでこんな書き換えができる。

これで微分方程式は解けた。のだが、積分定数Cが残っているのはちょっと気持ちが悪い。よくこれは「初期値によって決まる」 と説明される。

たとえば、t=0のときにx=x0などとして代入する。これは容易に

081116eq6

だと分かる。これを代入すれば

081116eq7

となる。

これで問題は終了、解決した。初期のネズミ個体数と、経過時間、それに定数a(これは最初の式を見れば分かるが、 ある個体数のときの増殖スピードをそのときの個体数で割ったものだ)さえ分かれば、一定時間経過後のネズミ個体数が計算できることになった。

ちょっと長引いたので一旦切って次の記事へ引き続き。 以下は余談みたいなもの。

で、この説明は、

  1. 微分記号はバラしていい
  2. バラした記号を使って積分していい
  3. 積分定数に定数のみを含むどんな演算をしても積分定数として1文字で表現できる

ということが分かっていればすんなり(1/xの積分とかは突っ込むと多少難しいが)理解できる。しかし、 これらは明示的に教えてもらわないと結構分かりにくいポイントではないかと思う。 対数あたりから数学は独学なのでこのあたりでかなりつまづいた覚えがある。まあ僕が鈍いだけかもしれないけど。

それで、この問題の答えが次の一般的な事実につながる。

  1. 「指数関数」と単に言った時にeを底とする関数を指すことが多い
  2. 「複利的な増加」「指数関数的増加」を表現するとき、「初期値×指数関数」の形のモデルを用いる

一度でもこの問題を解いたことがあれば本当になんでもないことなんだけど、無いと特に後者が気持ち悪い。 何せ突然eを含む指数関数が出てくるんだから。

それでまー言いたいことは何かというと、自然科学を扱う学課を持つ大学では解析学を必須にすべきだし、 微分方程式について簡単な例から教えるべきだということ。 いま高校では微分方程式を教えていないということを知っている大学教員がどれだけいるのだろうか。 現状の問題がどこにあるのかきちんと把握できているんだろうか、改善に向けた努力はしているんだろうか。

…愚痴を言っていても気分は晴れないので次へ。

posted by Rion778 at 00:57 | Comment(0) | TrackBack(0) | 勉強ノート | このブログの読者になる | 更新情報をチェックする
2008年11月13日

養老へ

養老公園へ紅葉を見に行ってまいりました。多少時期が早かった感はあるものの、 緑にカエデの赤が少し混じる景色もなかなかのものではないかと。

なんだか思ったより眠いので続きの写真はFlickrでどうぞ。 ちなみにFlickrで写真を見るときは写真の上に表示される「ALL SIZES」ボタンを押すとフルサイズで閲覧ができます。

posted by Rion778 at 23:01 | Comment(0) | TrackBack(0) | diary | このブログの読者になる | 更新情報をチェックする
2008年11月07日

imagematrixオブジェクトのHSV変換[R]

Rに元から用意されている関数をよく調べたらRGB→HSV変換用の関数(しかも名前がrgb2hsv。万が一昨日のオブジェクトを保存してしまった人は消去してください。)があったので昨日の関数のうちRGB→HSV変換関数を書き直し。

my2.rgb2hsv <- function(x){
	HSV <- rgb2hsv(as.vector(x[,,1]), as.vector(x[,,2]), as.vector(x[,,3]),maxColorValue = 1)
	array(c(HSV[1,]*360,HSV[2,],HSV[3,]),dim=c(dim(x[,,1]),3))
	}

使い方は昨日定義した関数と同様。imagematrixオブジェクト(rgb)を引数に与えればhue, saturation, valueの3成分をそれぞれ行列として持つ3次元配列が帰ってくる。やっぱこっちの方が圧倒的に早い。

HSV→RGB変換を行う関数は今のところ見つけてないのでとりあえずそのまま。なんか見つけてしまいそうで恐ろしい。

posted by Rion778 at 13:52 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月06日

RGBとHSVの相互変換[R]

Rのrimageパッケージはjpeg形式の画像をRに読み込ませて取り扱うのに便利なパッケージだが、色の表現形式としてはRGBのみの対応になっている。

RGB形式は確かに便利でわかりやすいが、用途によっては色相(Hue)、彩度(Saturation・Chroma)、明度(Brightness・Lightness・Value)の3つの成分を用いて色を指定するHSVという形式が便利なことがある。

便利なことがあるゆえに、様々な言語においてRGB⇔HSV相互変換のためのプログラム、アルゴリズムが書かれ、公開されているのだが、ちょっと探した感じではR用のものは見つけられなかった。(2008/11/7追記:はてブのコメント見ててもしやと思ったら変換用の関数があった。しかも名前がrgb2hsv。ちょっと打ち込んでみてたら分かったのに恥ずかしい…。ただそのままでは使えそうにないのでもうちょっと調べてまた書く予定。hsvをrgbにする関数は本当に無いかも?とりあえず以下のスクリプトのオブジェクト名は変更。)

ので作ってみた。

まずはRGB→HSV

#3次元配列から第3次元各要素の最大値を要素とする2次元行列を生成する
max.rgb <- function(z){
	y <- z[,,1]
	y[z[,,1]<=z[,,2] & z[,,3]<=z[,,2]] <- z[,,2][z[,,1]<=z[,,2] & z[,,3]<=z[,,2]]
	y[z[,,1]<=z[,,3] & z[,,2]<=z[,,3]] <- z[,,3][z[,,1]<=z[,,3] & z[,,2]<=z[,,3]]
	y
	}

#3次元(略)最小値を要素とする(略)
min.rgb <- function(z){
	y <- z[,,1]
	y[z[,,1]>=z[,,2] & z[,,3]>=z[,,2]] <- z[,,2][z[,,1]>=z[,,2] & z[,,3]>=z[,,2]]
	y[z[,,1]>=z[,,3] & z[,,2]>=z[,,3]] <- z[,,3][z[,,1]>=z[,,3] & z[,,2]>=z[,,3]]
	y
	}

#RGB→HSV変換
my.rgb2hsv <- function(x){
	#Vの計算
	hsV <- max.rgb(x)
	#Sの計算
	hSv <- (max.rgb(x)-min.rgb(x))/max.rgb(x)
	hSv[max.rgb(x)==0] <- 0
	#Hの計算
		#入れ物の用意
			Hsv <- x[,,1]
		#Rがmaxの部分のH
			Rmax <- 60*(x[,,2]-x[,,3])/(max.rgb(x)-min.rgb(x))
			Hsv[x[,,1]==max.rgb(x)] <- Rmax[x[,,1]==max.rgb(x)]
		#Gがmaxの部分のH
			Gmax <- 60*(x[,,3]-x[,,1])/(max.rgb(x)-min.rgb(x)) +120
			Hsv[x[,,2]==max.rgb(x)] <- Gmax[x[,,2]==max.rgb(x)]
		#Bがmaxの部分のH
			Bmax <- 60*(x[,,1]-x[,,2])/(max.rgb(x)-min.rgb(x)) +240
			Hsv[x[,,3]==max.rgb(x)] <- Bmax[x[,,3]==max.rgb(x)]
		#Hが定義されない部分
			Hsv[max.rgb(x)==min.rgb(x)] <- 0
		#値がマイナスの部分
			Hsv[Hsv<0] <- Hsv[Hsv<0]+360
	array(c(Hsv, hSv, hsV),dim=c(dim(Hsv),3))  #imagematrixオブジェクトと同様にH,S,Vの配列を出力
	}

最初にRGB成分の最大値・最小値のみを要素とする行列を作成する関数を定義し、これを変換用の関数中で用いている。なんかもうちょっと綺麗な書き方をしたい・できそうな気がしたけど思いつかない。

RGB→HSV変換関数の出力はimagematrixオブジェクトと呼ばれる配列と同様のものにした。H成分、S成分、V成分がそれぞれ一枚ずつ行列に格納される。

使うにはrimageパッケージのread.jpeg関数などで作成したimagematrixオブジェクトを突っ込むだけ。

photo <- read.jpeg("写真.jpeg")
photo.hsv <- rgb2hsv(photo)

ちょっと重いのが気になる。どこが原因なんだろ。

次にHSV→RGB変換。場合分けが多いのでちょっと大変。

#HSV→RGB変換
my.hsv2rgb <- function(x){
	H <- x[,,1]
	S <- x[,,2]
	V <- x[,,3]
	R <- array(rep(0,length(H)), dim=dim(H))
	G <- array(rep(0,length(H)), dim=dim(H))
	B <- array(rep(0,length(H)), dim=dim(H))
	#Hiという数値の計算
		Hi <- floor(H/60)
	#Fの計算
		rgbF <- H/60 - Hi
	#Mの計算
		M <- V*(1-S)
	#Nの計算
		N <- V*(1-S*rgbF)
	#Kの計算
		K <- V*(1-S*(1-rgbF))
	#Hiが0のとき
		R[Hi==0] <- V[Hi==0]
		G[Hi==0] <- K[Hi==0]
		B[Hi==0] <- M[Hi==0]
	#1のとき
		R[Hi==1] <- N[Hi==1]
		G[Hi==1] <- V[Hi==1]
		B[Hi==1] <- M[Hi==1]
	#2のとき
		R[Hi==2] <- M[Hi==2]
		G[Hi==2] <- V[Hi==2]
		B[Hi==2] <- K[Hi==2]
	#3のとき
		R[Hi==3] <- M[Hi==3]
		G[Hi==3] <- N[Hi==3]
		B[Hi==3] <- V[Hi==3]
	#4のとき
		R[Hi==4] <- K[Hi==4]
		G[Hi==4] <- M[Hi==4]
		B[Hi==4] <- V[Hi==4]
	#5のとき
		R[Hi==5] <- V[Hi==5]
		G[Hi==5] <- M[Hi==5]
		B[Hi==5] <- N[Hi==5]
	#S=0のとき
		R[S=0] <- V[S=0]
		G[S=0] <- V[S=0]
		B[S=0] <- V[S=0]
	imagematrix(array(c(R, G, B),dim=c(dim(R),3)))  #imagematrixオブジェクトとして出力
	}

出力はimagematrixオブジェクトなのでそのままプロットしておk。

plot(my.hsv2rgb(photo.hsv))

ついでにhsv形式の画像をプロットする関数なども作っておくと便利かもしれない。

#HSV形式のデータをプロットする関数
hsv.plot <- function(x){
	plot(my.hsv2rgb(x))
	}

まあちょっとだけ打ち込む文字数が減るだけなんですけど。

これだけなんだけど、肝心のhsvへ変換する関数が重いのがやっぱ気になる。使えないほどじゃないんだけど、rgbへの変換より明らかに重い。もうちょっと調べて改良しないとだめか。

posted by Rion778 at 20:09 | Comment(0) | TrackBack(0) | PC関連。HTMLとか,Linuxとか,Rとか | このブログの読者になる | 更新情報をチェックする
2008年11月02日

長野へ

研究室がクーラー工事でアレだというので、日帰りで大王わさび農場と諏訪大社へ行ってまいりました。

これは大王わさび園入り口で販売されていたわさび。3本1000円のものから1本5000円のものまでピンきり。 品種は田に吊るされていた札からするに長野23号だと思われるが確かではない。ぼちぼちの辛味。

入ってすぐのわさび田では洗浄作業を行っていた。わさびは通常2年をかけて栽培する。 放っておくと泥が蓄積し透水性が低下したり病気の原因となったりするのでわさび田は洗浄が必要。 てっきり最近は高圧の放水とかで機械的にやるものだと思ってたけど手作業だった。観光用か?面積を考えるとかなりの重労働。

かの有名なわさび像であります。その他にも謎としか言いようのないオブジェクトが点在しておりました。

定職直後と思われるわさび田。左手側が上流で、手前と奥に見える水路より中央の水路が低くなっており、 それぞれの畝間を水が流れる構造となっている。 わさびは自家中毒を起こす物質を放出するために畑などでは葉が大きくなるばかりで根茎が肥大しないが(いわゆる「葉わさび」となる)、 常に流れる水によりこれが洗浄される場合には根茎が肥大する(というのが定説だが詳細はよくわかっていないらしい)。

1年程度は経過していると思われる株。中央では花が咲いている。花は佃煮などにして食される。 割と見た目が汚いし病気や虫食いも見られるが、まあこんなものが普通。 きれいな葉などなかなか取れないので佃煮やらわさび漬けやらにするわけで。また、下流側であることも影響していると思われる。 湧き水というものは年中水温が一定なので、わさびが暑い夏や寒い冬を元気に乗り越えることを可能としているのだが、 それもわさび田の下流となれば気温の影響を受けやすくなり、また養分も少なくなる。そのため、 上等田というものは通常上流の水が湧いてくる付近に存在する。

これが大王わさび農場の名の由来となっている大王神社。「大王」とはなんぞという話だが、 その昔安曇野を治めていた八面大王という怪力無双の首領がおり、その大王の「胴体」が納められているのが大王神社だとかなんとか。 なんでも昔全国統一を目指す中央政権によって大王は打ち倒されたのだが、あまりに強い大王の復活を恐れ遺体をバラバラにしたのだとか。 なんと恐ろしい伝承か。

それで一通り大王わさび農場を見た後は諏訪大社へ。諏訪大社といえば御柱祭で有名。 まー諏訪神社も御柱祭的なものも全国各地にあるので有名もへったくれもないんだけど。私の地元の近く(といっても山を越える必要があるが) にもある。樹齢800年の大杉があるのでそれなりに有名なところ。

時間の都合もあり秋宮だけ。

神楽殿。巨大な注連縄と巨大な狛犬が印象的。注連縄はさすがに出雲大社の大注連縄が日本一だが、 狛犬は諏訪大社のものが日本一だそうだ。ちなみに諏訪大社の祭神の建御名方命は出雲大社に祀られる大国主の長男だそうで。 (詳しくはWikipediaなどでどうぞ)

といっても本来の祭神はミシャグチ神をはじめとする土着神だそうで。ミシャグチ神といえば蛇の姿をしているといわれる。 そのためにとぐろを巻いた注連縄が神楽殿の左右においてあるのだろう。ちなみに宝物殿にもあった。後ろに一本だけ (実際は幣拝殿を囲むように4本ある)御柱が見えるが、これがミシャグチ神をおろす依り代なんだそうだ。

これが上の写真で右側に見えていた御柱。賽銭箱の横には「御柱に賽銭を打ち込まないでください」と注意書きが。 打ち込むような輩がいるのかしら。ちなみに一之御柱と二之御柱は見えるが、三、四之御柱は幣拝殿裏側に設置されているためあまり見えない。

とりあえずこんなもんで。

今回の総走行距離は500km以上。低反発の座布団を駆使しても若干腰が…。 まー高速ばっかだったので数値が示すほどの大変さはなかったけど。

以上ぱぱっと紹介しましたがほかにもいくらかの写真がFlickrにアップしてありますのでよろしければご覧くださいまし。

posted by Rion778 at 14:12 | Comment(0) | TrackBack(0) | diary | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。