• 締切済み

今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします

今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします。なお、 各配列には整数0か1が入るとします。このとき、この配列はメモリ上の容量は いくらになるのでしょうか? 他のケース、例えば同じ次元の配列だが、各配列に1から100までの整数が入るケース や実数が入る場合など、計算できるようになりたいので、計算過程を併せて 教えていただけると幸いです。

みんなの回答

  • starshira
  • ベストアンサー率55% (141/256)
回答No.4

No.2です。 >それが何番目の要素かという情報 No.3さんがおっしゃるように、3次元なら3つの情報だけを持っていればOKです。 質問者様が懸念されているのは、一つ一つの要素に番号を振る必要があるのではないか?ということかと思いますが、 普通はそういうことはしません。(容量が増えてしまいますから) わかりやすいように2次元配列で説明します。 何次元の配列でも、メモリ上では一列に並びます。 たとえば、 A = {1 2 3 4 5 6} という配列があったとします。 (Fortranの配列の書き方が分からないので、適当に書いています) これが2×3の配列だよ、と教えてやれば、 1 2 3 4 5 6 という形に並ぶんだな、ということは自明です(※)。 同様に3×2の配列だ、と教えてやれば、 1 2 3 4 5 6 と並んでいるんことが分かります(※)。 だから、いちいち番号を振る必要はなく、各次元の大きさだけが分かればよいのです。 ※プログラム言語によっては、 2×3の場合に 1 3 5 2 4 6 3×2の場合に 1 4 2 5 3 6 と解釈します。

全文を見る
すると、全ての回答が全文表示されます。
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.3

>プログラム程度なら私のような素人でも書けますが、 >コンピュータの仕組みまではわからないと思います。 いやいや プログラム書く人なら変数型(データに何バイト使うか・どんな値が扱えるのか)などは 基本中の基本ですよ? それが分からなかったらまともなプログラムなんか組めません 表計算がFortranとかかれてますが それは(開発)言語を意味します(Fortranで作成した表計算ソフトって意味かもしれませんが) #2さん書かれてますが整数型変数であれば32ビットや64ビットで 扱われるものが多いですが開発環境やコンパイラによって 実際のバイト数(ビット数)は変わる可能性があります 普通は最低でも8ビット(1バイト)区切りで扱われます 特殊な使い方をすれば1バイトで8個の0/1を8個の変数名のような形で 扱えますがいまどきあまり使用される手法ではありません (その昔メモリが高価だったときにはメモリ消費を少なくするためにそのような手法も使われました) メモリ自体は1バイトで8ビットまでのデータを扱えるので 32ビットの変数を使ったときは4バイトのメモリが使われることになります >それが何番目の要素かという情報 扱いたいのは3次元配列のデータですのでそれぞれの要素の位置を 求める変数(3個の変数)があれば良いことになります ですので全て32ビット変数で確保するのであれば 4バイト(1変数)×(2×3×400+3)=9612 バイトのメモリが必要 ということになります

全文を見る
すると、全ての回答が全文表示されます。
  • starshira
  • ベストアンサー率55% (141/256)
回答No.2

配列の容量 = 要素の数 × 1要素あたりの容量 です。 要素の数 = 2×3×400 です。 1要素あたりの容量は、プログラムの仕方や、数値計算ソフトの仕様によって異なります。 単純な話をすると、 0か1しか入らないと分かっているのなら、1要素につき1bitの容量で済みます。 だから、1×2×3×400 bit = 2400 bit です。 1bitは容量の最小単位です。 しかし、これは特殊なケースです。 多くの場合、整数と言えば1要素につき32bitか64bitを消費します。 どちらなのかは、数値計算ソフトの仕様によりますので説明書を読んでください。 実数も同様です。 また、あるソフトでは普通は整数1つあたり64bitを消費するが、 プログラムの仕方によっては整数1つあたり32bitに変更することができたりします。 最初の例のように、1要素につき1bitを消費するようにするには、それなりのプログラムを書かないとダメだと思います。 単に「整数だから」「実数だから」「0と1だけだから」というだけでは容量計算できませんので、説明書とにらめっこして計算してください。 以上、質問者様のコンピュータに関する知識量が分からなかったので、できるだけ易しく書きました。 詳しい説明が必要な部分は指摘してください。 (あるいは平易すぎて役に立たないかもしれませんが…)

kdfokn
質問者

お礼

非常に丁寧に解説していただき感謝します。 おかげさまで問題を解決することができました。 素人考えでは配列の各要素のデータに加えて、それが何番目の要素かという 情報も必要になり、果たしてそれがどれくらいの容量になるのかという 疑問が生じます。本来の質問からは少しそれてしまいますが、もしよければ 教えていただけたらと思います。 質問が質問になっていなければ無視してください。

全文を見る
すると、全ての回答が全文表示されます。
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

質問の意味が分かりません ある数値計算ソフトとは何でしょう? 自作ソフトのことですか? >メモリ上の容量はいくらになるのでしょうか? 自作ソフトの話なら自分で定義した型のサイズ(容量) 自作で無いなら何のことやら プログラム書く(書ける)人の質問レベルではないような 気がするんですが 計算過程ってのも何の計算過程なのか意味が分かりません もう少し細かく書いてください

kdfokn
質問者

お礼

数値計算ソフトはFortranです。最近趣味で始めました。 プログラム程度なら私のような素人でも書けますが、 コンピュータの仕組みまではわからないと思います。 ただ、質問の仕方を気をつけるべきですね。ご指摘どうも ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Fortran の配列使用に必要なメモリについて

    Fortranで数値計算をしています。 配列に必要なメモリの計算方法について質問させてください。 例えば、real(4),real(8),real(10),integer,などでそれぞれ a(10,10) と宣言した配列を用いた計算に必要なメモリはいくらになるでしょうか? よろしくお願いします。

  • メモリと配列に関して

    大量のデータを扱うプログラムを作りたいと思っています。 たくさんの配列(配列はDouble型です。)を使うため、 System.outofmemeoryが出てしまいました。 大きい配列を使うための工夫や、現在メモリを2GB積んでる パソコンで計算しているのですが、メモリ容量に換算して どの程度の大きさの配列を作れるのかが教えていただきたいです。 また、これらに関する疑問に答えてくれる書籍やWebサイトでも 教えて頂ければ幸いです。 お手数ですが、よろしくお願いします。

  • 多次元配列のデータ個数やメモリについて

    今,2次元配列で, static double g[20000][10] として,配列を使用することを考えています。(他にも一次元配列を多くあります)これを使って計算を行います。 g[20000][9]の場合は正常に動いたんですが,g[20000][10]にするとaccess violation(アクセス違反)のように出ます。メモリの問題でしょうか,それとも限界なんでしょうか,,,,? この解決策はありますか?よろしくお願いします。 Visual C++6.0 で動作

  • 塩基配列の同一性(%)を計算したい

    いまはWinのフリーソフトBioeditを使ってシークエンスの並べ替えをしています。 いくつかの塩基配列同士の同一性(identity)の計算をしたいのですが、いくらいじってもそれらしきものが計算できません。 相同性でネットを検索するとBLASTとかそういう結果しか出なくて、同一性で検索すると双子の同一性とかしか見つけられなくて困っています。 ひとつだけBioeditでそれらしきものとしてidentity matrixという表がでて(まるで総当たり戦のような表)が出ましたが、数値が0.280とか0.180とかで、この数値の意味も分からなく使えません。 どなたか bioeidtで同一性の算出方法をご存知の方教えてください。 または、ネットで(配列を送ったら)計算できる場所をご存知のかた教えてください。

  • 数値をポインタ文字配列に変換

    整数型の数値を文字に変換しようと sprintfを使おうと思ったのですが ポインタの文字型配列を第一引数 にして変換すると エラー出てしまいます 開発環境はVC++2010で WindowsXPproです これは仕様なんでしょうか? もしそうなら他の変換方法はありますか?

  • C言語、配列の積

    整数型二次元配列x,yに適当な値をキーボードから入力し、次にそれらの行列の積を計算して二次元配列zに代入し、行列x,y,zの要素を出力せよ。但し、配列の大きさは最初にキーボードから入力しておき、変数宣言においては、配列の大きさを大きめに宣言しておき、キーボードから入力する配列の大きさはその範囲内で入力するようにせよ。 という問題です。よろしくお願いいたします

  • 数値計算の結果がハードウェア構成によって異なることはあるか?

    同じ工業用のシミュレーションソフトである数値計算をさせた場合に同じOSでハードウェア構成の異なる(メモリ・CPU等)PCで若干異なるの計算結果が出でてくる事例がありうるかどうかと考えられる原因をお教えくださると助かります。

  • 数値計算向けのPC

    大学の研究で数値計算をしなければなりません。 計算に使用するプログラムは市販されているもので、計算に必要な知識やノウハウなどはプログラムを動かしたり計算をしながら覚えていくしかないと考えています。 今悩んでいるのは計算に使用するパソコンです。 いままではノートパソコンで計算をしていましたが、ステップ数を本来必要な計算の1/10に設定した場合でも12時間以上かかってしまうことがわかりました。 そのパソコンはノートパソコンで、仕様はCPUが1.7GHz、メモリが2GBです。 大学等にあるデスクトップパソコンでも計算してみましたが、私の所有するノートパソコンよりもクロック周波数・メモリ共に劣るせいなのか、計算時間がかなりかかってしまいました。 一回の計算に膨大な時間がかかってしまうので、これを解消したいのですが、現在使用できるPCではこれが困難です。 思い切って、数値計算用にPCを新しく購入しようかとも考えてもいるのですが、コンピューター関連の知識が乏しいこともあり、どういったものを購入すればいいのかわかりません。 個人的にはCPUが3GHz程あるノートパソコンがあれば、と考えているのですが・・。 大学やお仕事などで数値計算をされたご経験をお持ちの方で数値計算に適したパソコンや、数値計算向けにパソコンをカスタマイズする方法をご存知の方がいらっしゃいましたら、ご教授ください。 その他、パソコンで長時間計算をする際、留意すべきことなどございましたら是非ご教授いただきたく存じます。 よろしくお願い致します。

  • 数値計算ソフト「MATLAB」について

    私は今大学生で、つい先日数値計算ソフト「MATLAB(マトラボ)」をのライセンスを購入し、さまざまなプログラムを実行しています。 しかし、当然ですが大規模なプログラムになればなるほど計算の実行時間が長くなってしまいます。 プログラムのループ文の見直しなどを行って計算の高速化を図ってみたりしましたが差は微々たるものでした。 なので、PCのスペックのほうを上げていきたいと思いました。 そこでみなさんにお聞きしたいのですが、 (1)MATLABの計算はサーバーPCとクライアントPC、どちらのスペックに依存しているのでしょうか。 (2)計算速度を速めるとしたら、どの部分の性能を一番高めるべきでしょうか。(例:CPU、メモリなど) どなたかお分かりになる方がいましたら、(1)(2)どちらか片方だけでも良いですので回答宜しくお願い致します。

  • ある条件を満たした最も近い数値を求める配列数式

    ある条件を満たした最も近い数値を求める配列数式について質問します。 A列には,C列の数値と比較する元になる数値が並んでいます。 B列には,D列の数値と比較する元になる数値が並んでいます。 C列には,A列の数値と比較する対象となる数値が並んでいます。 D列には,B列の数値と比較する対象となる数値が並んでいます。 E列には,計算式が入ります。 すなわち,例えば,E20には, C$1:C20の範囲内の数値で, 右となりにあるD$1:D20の数値が0でなく,かつ,B$1:B20の数値以下である数値の中で, 最もA20の数値に近い数値を求めます。もし,この条件に合う最も近い数値が複数あった場合には,最も小さい数値を求めます。 行番号   A    B    C   D   E 1       100   10  89   0   0 2       101   8   90  10   0 3       102   11  92  11  92   4        99   7   77  0   0 5        87   11  68  12  92 6       105  14  100  7   100 7       102   9   78  8   100 8       88   15  102  0    90 9       98   14   99  10    99 10      150   13   78  9   100 11      103    8   79  0   100 12      87     9   68  8   78 13      77   10  70  10   78 14      89   12  71   5   90 15      65   14  102  3   68 16      88   13  105  0   90 17     123   15   98  8   102 18     145   17   99  10   102 19      85    8  100  0    90 20      84    9   87  5    78 一定の条件を満たした配列の合計を計算する関数として,SUMPRODUCT()という便利な関数がありますが, この関数に相当する関数がないので困っています。 MIN関数が配列数式に対応していて,かつ,MIN関数をうまく利用して,最も近い数値を求めることがでるき方法があれば,私の希望が解決できそうなのです。 以上,よろしくアドバイス願います。 なお,エクセルのバージョンは,2010です。 本日,同じ表題の質問をしましたが,その際の質問の本文に掲載した数列が崩れていましたので,再度投稿します。 質問番号:6449070