Post(s) tagged "配列"
ヒトゲノムの3D構造は「丸めた麺のようなフラクタル」 | WIRED VISION
ヒトゲノムを数百万の断片に分解し、その配列をリバース・エンジニアリングする手法により、ゲノムの3次元構造の画像が、かつてないほどの高解像度で作成された。
再現された構造は目を見張るようなフラクタル形状をしている。この手法を使えば、ゲノムのDNAの内容だけでなく、ゲノムの形状そのものが、人間の発達や疾病にどのような影響を及ぼしているか調べることが可能になるだろう。
「染色体の空間構造が、ゲノムの制御に非常に重要だということが明らかになった」と、「Science」誌の10月9日号に発表された今回の研究論文を執筆した1人で、マサチューセッツ大学医学部の分子生物学者であるJob Dekker氏は話す。
初歩的な生物の教科書や、一般の人々のイメージの中では、ヒトゲノムは23対の染色体におけるDNAとタンパク質の複合体[クロマチン]の中に収められ、それら染色体はきれいなX型をして1つ1つの細胞核の中に並んでいるように描かれている。しかし実際には、そのような状態になるのは細胞が分裂しようとしているごく短い間だけだ。それ以外のとき染色体は、絶え間なく形を変えるかたまりとして存在する。むろん、染色体を構成するひも状のDNAも、密集してかたまりになっている。ゲノムを端から端までまっすぐに伸ばすと、約2メートルほどの長さになる。
何十年も前から、一部の細胞生物学者たちの間では、ゲノムが圧縮されているのは効率よく保存するための仕組みというだけでなく、遺伝子の機能や相互作用そのものに関係しているのではないかと考えられてきた。しかし、それを突き止めるのは容易ではない。ゲノム配列を解析しようとするとゲノムの形状が壊れてしまうし、電子顕微鏡では活性表面の下をほとんど見通すことはできない。その構成要素は知られていても、ゲノムが本当はどんな形状をしているのかは謎のままだった。
ゲノムの構造を直接見ることなく解明する方法として、研究チームはまず細胞核をホルムアルデヒドに浸した。ホルムアルデヒドはDNAと相互作用して接着剤のような働きをする。これによって、ゲノムの直鎖状配列では離れているが、実際の3次元のゲノム空間では近接している遺伝子どうしがつなぎ合わされた。
研究チームはその後、ホルムアルデヒドによるつながりは残したまま、直鎖状配列の遺伝子どうしのつながりは分解するような化学物質を加えた。その結果、ペアになった遺伝子の集まりができあがった。それはちょうど、麺を100万もの細かな層に切り分けて混ぜ合わせ、ボール状に凍らせたようなものだった。
遺伝子のペアを調べることで、元のゲノムではどの遺伝子どうしが近接していたのかが特定された。ソフトウェアを用いて、遺伝子ペアをゲノム上での既知の配列と相互参照した結果、ゲノムのデジタル立体構造が組み立てられた。その立体は目を見張るようなものだった。
「どこにも結び目がなかった。絡み合った箇所が1つもない。麺を驚異的に密集させて丸めたボールのようでありながら、その麺の一部を引っ張り出したり戻したりできる。しかも、全体の構造は全く崩れない」と語るのは、論文の共同執筆者でハーバード大学の計算生物学者であるErez Lieberman-Aiden氏だ。
これを数学的に説明すると、ゲノムのこれら断片は折りたたまれてヒルベルト曲線[フラクタル図形の1つ]に似たものを形成している。ヒルベルト曲線は、決して重複することなく2次元の空間を埋め尽くすことのできる図形の一種だが、同じことが3次元で行なわれているわけだ。
研究チームはまた、染色体には2つの領域があることも発見した。1つは活性化した遺伝子の領域で、もう1つは不活性な遺伝子の領域だ。そして、絡み合うことなく作られた曲線のおかげで、遺伝子はその間を容易に移動できるようになっている。
Lieberman-Aiden氏はこの配列を、大きな図書館に隙間なく並ぶ電動の本棚にたとえた。「それらは書架のようなもので、上下左右に隙間なく積み重なっている。そしてゲノムがある遺伝子の一群を使いたくなると、それが収まっている書架を開く。ただしゲノムは書架を開くだけでなく、図書館の新しい場所に移動させる」
活性化した遺伝子と不活性な遺伝子の領域を区別していることは、ゲノムの構造そのものが遺伝子機能に影響を及ぼしていることの裏付けとなる。
ゲノムの形状と遺伝子的な機能を結びつけて研究することで、「直鎖状配列」のみに焦点をあててきた従来のゲノミクスによっては不明だった疾病と遺伝子との関係も解き明かされていくだろうと期待されている。研究チームはさらに、ゲノムの形状がどのように変化するのかについても研究したいと考えている。幹細胞から成熟細胞に変化する間、そして細胞が機能している間、ゲノムの形状は常に変化しているとみられているが、詳しいことはわかっていない。
— JavaScriptの配列をちゃんと理解する:JavaやCとは大違い - builder by ZDNet Japan配列のループ処理
配列要素をループ処理するためには、配列オブジェクトが持つ「length」プロパティを使うのが普通です。lengthプロパティは配列の「長さ」を返します。
for (var i = 0; i < a.length; i++) {
…
}ちなみに上のコードは、下のようにするとパフォーマンスが大きく向上します。その理由は、「a.length」を最初の一度しか参照しないためです。JavaScriptのドット(.)演算子は、すでにご存じの通りハッシュテーブルの検索処理を伴いますので、かなりの処理コストを伴うためです。
for (var i = 0, n = a.length; i < n; i++) {
…
}
— JavaScriptの使える小技です。: 配列からある要素を削除する配列からある要素を削除する
Array.splice(開始番号,削除する要素数);
配列の最初の値を削除 : Array.shift()
配列の最後の値を削除 : Array.pop()
— JavaScript の配列と連想配列の違い - IT戦記走査の仕方
配列は素直に for
var array = [‘hoge’, ‘fuga’];
for (var i = 0; i < array.length; i ++) {
alert(array[i]);
}連想配列には for in
var hash = { hoge: ‘hoge’, fuga: ‘fuga’ }
for (var i in hash) {
alert(hash[i]);
}
— JavaScript の配列と連想配列の違い - IT戦記配列とは
配列プロトタイプを継承したオブジェクトのことである。
以下のすべては同じ配列である。
// 1
var array = [‘hoge’, ‘fuga’];// 2
var array = new Array(‘hoge’, ‘fuga’);// 3
var array = Array(‘hoge’, ‘fuga’);// 4
var array = [];
array[0] = ‘hoge’;
array[1] = ‘fuga’;// 5
var array = [];
array[‘0’] = ‘hoge’
array[‘1’] = ‘hoge’// 6
var array = { 0: ‘hoge’, 1: ‘fuga’, length: 2 };
array.__proto__ = Array.prototype;6 の例が分かれば、 JavaScript の配列は分かったも同然である。
— JavaScript の配列と連想配列の違い - IT戦記連想配列とは
JavaScript では連想配列は一番シンプルなオブジェクトのことである。つまり、すべてのオブジェクトは連想配列である。
以下のすべての連想配列はまったく同じものである。
// 1
var obj = { hoge: ‘hoge’ };// 2
var obj = { ‘hoge’: ‘hoge’ };// 3
var obj = {};
obj.hoge = ‘hoge’;// 4
var obj = {};
obj[‘hoge’] = ‘hoge’;// 5
var obj = new Object();
obj.hoge = ‘hoge’;この hoge のように連想配列のキーになるシンボルのことをプロパティという