サンプリングトレースの効率的なアルゴリズムについて

このQ&Aのポイント
  • サンプリングトレースのプログラムにおいて、効率的なアルゴリズムについて教えてください。
  • 時間軸とともに発生したランダムなデータの合計の平均値を求めるため、現在までの合計とサンプリング回数を考慮する必要があります。
  • 現在までの合計を格納する箱の制限がある場合、大きなサンプリング値に対応する効率的なアルゴリズムが存在するか教えてください。
回答を見る
  • ベストアンサー

サンプリングトレース

温度の履歴を処理するプログラムを考えているのですが教えてほしい事があります。 <質問> 時間軸とともに0~1000までの数値がランダムに発生したとします。1秒おきにランダムに発生したデータを取り出し、全部の合計の平均値を求めたいのです。 私が考えているのは サンプリング値 + 累計 = 現在までの合計 現在までの合計 ÷ サンプリング回数 = 平均値 上記の計算で平均値が出ると思います。しかし、条件があります。累計を格納する箱が最大32767までしかはいらなかったとしら、サンプリングで1000という大きな値がいくつも入った場合、32回までしかサンプリング出来ません。 何かもっと効率の良いアルゴリズムがあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • postpapa
  • ベストアンサー率41% (27/65)
回答No.1

間違ってたら笑い飛ばして下さい。 サンプリングの値を、何万分の一にし処理出来ませんか。 平均値を求める時に再度復元し、計算出来ると思いますが。 以前(20年位前)これでメモリー消費を減少させた記憶が有るのですが 古い話ですいません・・・・・・・・・・・・

cyan1110
質問者

お礼

笑い飛ばすなんてとんでもない。的確な回答です。ありがとうございます。postpapaさんの回答をヒントに以下のようなことも考えてみました。 温度コントローラというのは設定値があり、実測値があります。サンプリング値に相当するのは実測値になるのですが、例えば100という設定値を与えると実測値もそれに近い値でデータが出てきます。この特性を活かせないか考えたところ、 (サンプリング値 - 温度設定値) + 累計 = x x ÷ サンプリング回数 = y y + 温度設定値 = 平均値 上記の方法だと、100というデータが何回出てきても0になるので累計が増えていかないということになります。しかし、これは実践向きではありませんのでやはりpostpapaさんに教えて頂いた方法がベストですね。

関連するQ&A

  • データの系列の平均の求め方のアルゴリズム

    100個の数値が並んでいてその平均を求めるという場合、全部足して100で割る、ということしか考えられなかったのですが、そうではないアルゴリズムがあるようです。プログラム的な説明だと以下のようです。 ave=0.0 平均が分かっていると仮定する。 do i=1,100 xx=x(i)-ave あるデータx(i)と、分かっている思っている平均aveとの差をとる。 ave=ave+xx/i その差をそこまでのデータ個数iで割る。新しいデータによる平均の変化量とみてそれを前の平均に加える。 enddo それを十分大きな回数繰り返す。そうすると平均に近づく。 このような考え方はある学問分野では常識なのかもしれませんが、近似ということになると思います。データの数が十分大きくて最初の平均が実際と異なるエラーが相対的に減ってくるとかです。このアルゴリズムにはどのような制約が付くものでしょうか。例えば乱数を発生させてその平均を求めるときに全部発生させてから和を取って個数で割るのではなく、1つ1つ乱数を発生させて発生し終わった時点で平均が計算できてしまっている、ということになります。分散も同じようなアルゴリズムになると思います。実験や理論的な検討を加えることはできると思いますが、あまりにも簡単なので常識であり、かつ性質も調べられているのではないかと思ってお尋ねしました。いかがでしょうか。

  • グラフ作成について

    お世話になります グラフ作成で、たとえば月ごとの温度と時間の平均を表にします。 X項目軸を月・Y数値軸を時間・Y第2数値軸を 温度にしたいと思っています。 X項目軸を月・Y数値軸を時間はグラフタイトルの所で入力は出来ましたが、Y第2数値軸が入力できません。 Y第2数値軸とX第2項目軸の所が、薄いグレーに塗りつぶされています すみません 宜しくお願い致します。

  • エクセル計算

    計算式(関数)で求めた数値をランダムなセルのみ合計したり平均を 出したりの求めかた有りましたら教えて頂きたいのですが お願いします。

  • アルゴリズムについて

    <課題> A列、B列に各20個の箱があったとします。この箱には1個までのボールが入ります。A列の箱にボールをランダムに10個入れました。この10個のボールを上から順番に隙間なくB列の箱に移し替える事が目的で、移し替える手段としてボール1個のみ掴むことの出来るアーム(アーム1)とボールを5個一括で掴むことの出来るアーム(ただし箱1個間隔のアームとする)(アーム5)を使って最短回数でB列に移すアルゴリズムを教えてください。 条件1.今回は10個のボールと書きましたが動的な数値であると解釈してください。 条件2.A列の箱内で移し替えを行ってもいいですが回数はカウントされるものとします。 条件3.アーム5は列の両端の箱からはみ出してはいけないものとします。 以上、よろしくお願いします。

  • 外気換気による結露防止効果について

    表面結露の発生について教えて下さい。 外気温度-20℃の環境下に,5m×5m×高さ3m程度の箱(自然換気を行う開口あり)を設置し,箱内をエアコンで35℃に温調している状態にある場合,室内に湿気発生源がないとすると,自然換気により外気と箱内の絶対湿度は同じになる(箱内絶対湿度<=外気絶対湿度)と考えてよいものなのでしょうか? そう考えると,理論上箱内表面温度は外気温度以下にならなければ結露は発生しない(ある程度断熱されているので表面温度は外気温度以下にならない)ということになると思うのですが・・・ また,この程度の箱の大きさで換気回数がいくつ以上なら箱内絶対湿度=外気絶対湿度になるのか一般的な数値があればお教えいただけると幸いです。 ちなみに箱内は人間が生活するような用途ではなく,機械等を収めるものです。  宜しくお願いします。

  • EXCELマクロでバイトのポジションを自動的に決めたい

    最近EXCELのマクロの勉強を始めました。 同じ時間に20人前後いる飲食アルバイトでその人達の配置を自動的に決めるプログラムを作ろうという試みをしています。ただ、アルゴリズムの構成でどんなのが効率がいいか詰まってます。 ポイントは ・休憩=つまり同じ時間帯にいる人といない人が存在する ・難しいポジションが存在(だれでもできるわけでもないポジションが存在) ・ずっと同じポジションにならないためにある程度ランダム的な要素が必要 と以上のようになってます。 アルゴリズムとして現在やろうとしていることは ・ポジション別スキルを5段階ぐらいに数値化してデータベース化 ・その時間帯にいる人を全員ピックアップ ・難しいポジション順にできる人をピックアップして一定以上のスキルを持っている人のなかからランダムで決めていく このような感じです。 詰まっているところは ・データベースから取り出してきたスキルデータをその時間にいる人というデータといかにつなげるか →時間ごとにワークシートをつくって名前とポジション別スキルデータの二軸の行列をつくっている人は×1いない人は×0で計算するというのを考えましたが、効率悪いような・・・ ・仮にその時間帯にいる人かつそのポジションができる人のデータをつくれたとして、そこから難しい順にポジションを振っていく時にどうやってそのデータを取り出してランダム化するか。 →Rand関数の使い方が分かっていないのかここがよーわかりません。名前とポジション別スキルデータの表からいかに取り出してランダマイズするか。また、できる人たちを上の方法で数値を取り出してもいかに名前とつなげるかなど・・・ よろしくおねがいします。

  • マクロで別シートに数値を移したいのですが・・・

    タイトルにありますとおり、マクロを駆使し、数値を別シートに移したいのですが なにぶんマクロに関してほとんど経験、知識はありません。 毎回手動でコピーを繰り返しているのですが、なんとかマクロで自動コピーできればありがたいです^^; 方法としては、フォームのボタンにマクロを埋め込むような形にしたいと思っております。 以下のようなシートがあったとします。 シート1 (抽出内容”平均”)    A   B   C   D   E   F   G 1  回数 25 2  2   3   4   6   3   2   9   3 1行目に、回数とあります。今回は25回目のデータとします。 2行目に、同一シートの別表から抽出された数値が並びます。 この数値は別表でオートフィルで抽出された数字ですので、毎回変更されるものとします。 今回は仮に”平均”という内容で抽出したデータだとします。 シート1 (抽出内容”合計”)    A   B   C   D   E   F   G 1  回数 25 2  10 10  20  11  15  16  8   3 同じく、25回目、抽出内容”合計”として、オートフィルで抽出した数値です。 シート2     A   B   C   D   E   F   G   H 100 回数 平均(1) 2  3  4  6  3  2  9  101 25  平均(2) 102     平均(3)  103     合計(1)10 10 20 11 15 16 8 104     合計(2) 105     合計(3) 106 107 108 回数 平均(1) 109 26  平均(2) シート2は、シート1で抽出された数値をコピーした表です。 A列は今回の回数、25となっております。この数値はこれより上に24回分の表があり、今回が25回目という意味です。 107行目以降も26、27、28と回数は続いていますが、現状では25が最新とし、108行以降は数値はなく、空白とします。 それぞれ平均、合計共に、シート1で3回抽出し、それぞれ別の数値が入るものとします。 これまでは、シート1で抽出後、手動でコピーし、シート2の該当セルに貼り付ける、という作業でした。 シート1  →   シート2  のコピーにマクロを使用したいのですが 回数が25の場合、シート2でA列を検索し、さらに抽出内容が”平均”1回目だった場合 平均(1)にコピーし、2回目だった場合平均(2)にコピーする、といった具合です。 イメージとしては、シート1に、(1)、(2)、(3) と、それぞれ入ったリストボックスなどがあり [平均][合計] のそれぞれボタンがあり、(1)を選び、平均を押すと100行目の平均(1)に入り 合計を押すと、103行目の合計(1)に数値が入る。と、いうような感じです。 この説明で私の意図するところが伝わるか不安ではありますが、このような場合に使えるマクロの式がございましたら ご教示いただけませんでしょうか^^; 実際の表とは若干ちがいますが、大まかなイメージとしては上に書いてある通りです。

  • 公平なランダム

     重複のないn個の配列を作成する、効率がよくて高速なランダム発生プログラムを探しています。  現在は下記のようなロジックを組んでいます。   1.n個の配列を用意(nはパラメータで与えられる)   2.配列に1からnまでの数値を昇順に格納   3.ランダムな値xを生成し、配列の1番目とx番目を交換   4.ランダムな値xを生成し、配列の2番目とx番目を交換       :       :   5.ランダムな値xを生成し、配列のn番目とx番目を交換  この方法を越えるものはないでしょうか。  条件は、効率(公平性)がこれよりも高くて、速度が O(2n) を超えないことです。  最終的に配列の先頭20個程度の効率が高くなっていればよく、それ以降は多少偏りがあっても構いません。  ちなみに現在は、単純に x = rand(n); という方法で生成しており、初期化関数は使っていません。  よろしくお願いします。

    • ベストアンサー
    • Perl
  • 足して100になるような乱数のアルゴリズム

    次のような、8つの変数にそれぞれランダム(0から100まで)に発生させた数を入れて 毎回合計で100になるようにしたいです。 a[0] = 12; a[1] = 21; a[2] = 8; a[3] = 30; a[4] = 0; a[5] = 14; a[6] = 5; a[7] = 10; もう1回実行したとしても a[0] = 2; a[1] = 14; a[2] = 62; a[3] = 5; a[4] = 0; a[5] = 0; a[6] = 1; a[7] = 16; と合計で100になります。 a[0] = 0; a[1] = 0; a[2] = 100; a[3] = 0; a[4] = 0; a[5] = 0; a[6] = 0; a[7] = 0; と滅多にありないですけど、このようになる可能性もあると思います。 このような乱数を発生させるためにはどのようなアルゴリズムになるのでしょうか?

  • エクセルグラフ~数値軸にマイナスある場合~

    少し分かりにくいとは思いますが、よろしくお願いします。 以下の表があります。(見難くてすみません) 例:         基準値   A商品   B商品   C商品 おいしさ      50     50     40     30     楽しさ       20     10     20     10      形         30     30     30     20 その他       -       -     ▲10       - 合計       100     90     80     60 これを「積み上げ棒グラフ」にしたいのですが、 B商品だけ、マイナス点が発生しており、合計点としては下がっているのですが、 しかし、B商品は各項目の点数だけを積上げると、90点のラインに数値軸がきてしまい、大変困っています。 ”各項目の点数はそのまま”で、 棒グラフを積み上げた時に、数値軸上はあくまでも合計がくるように、 マイナス数値分下げた状態から、グラフを作成することは可能なのでしょうか? また、他に良いグラフの作り方・考え方等があれば、教えてください。 よろしくお願いいたします。