この質問への回答をインターネットで徹底的に調べましたが、他の場所での回答には具体的すぎるようです。これが私の最後の停留所です。
はじめに、これは宿題の問題ではありませんが、クイズに合格したオンライン Coursera コースを基にしています。正解は出ましたが、ほとんど運でした。また、これはコースに関連するものというよりは、プログラミングに関する一般的な質問であるため、公開フォーラムで質問する権利があることは承知しています。
最後に、MatLab でこれを実行しようとしています。ただし、C++、Python、またはその他の高水準言語での回答がある場合は、それらのソリューションを MatLab 構文に簡単に適応させることができるので、それは素晴らしいことです。
ここにあります:
T と M の 2 つのベクトルがあり、それぞれに 600,000 の要素/エントリ/整数があります。
T は昇順で 1 から 600,000 までのミリ秒として入力され、M の各要素は、T の対応する各ミリ秒エントリの「オン」または「オフ」(それぞれ 1 または 0 として入力) を表します。 T で 1 ~ 600,000 の特定のミリ秒に対応する M。
T の 150 ミリ秒から始めて、そこから 150 要素/ミリ秒単位で (包括的に)、150 のグループの平均ミリ秒値を取得する必要がありますが、エントリが M で 1 であるミリ秒のみです ('on ')。たとえば、T の最初の 150 ミリ秒を見て、M の値が 1 であるミリ秒を確認し、それらを平均化する必要があります。次に、T のエントリ 151 から 300、次に 301 から 450 などでもう一度実行する必要があります。これらの新しい平均も新しいベクトルに格納する必要があります。問題は、M の対応する 1 の数が、T の 150 ミリ秒のすべてのグループで同じにならないことです (そして、ミリ秒の実際の値を平均しようとしているので、使用している値はT のエントリの順序は同じになります)。
私の試み:
M には 53,583 個のランダムな 1 しかないことがわかります (600,000 個のエントリのうち、残りは 0 です)。「検索」演算子を使用して、M から 1 であるエントリを、T に対応するミリ秒値を持つ新しいベクトル K に抽出しました。そのため、K は昇順の乱数の束のように見えます。これは単なるリストです。 「オン」になっている T のすべてのミリ秒 (M に 1 が割り当てられます)。
したがって、K は [2 5 11 27 39 40 79 ...... 599,698 599,727 など] (M の 1 であるすべてのミリ秒値) のようになります。
したがって、150 のグループで平均する必要があるすべての値であるベクトル K がありますが、問題は、ベクトル T (1 から 600,000) に基づいて 150 のグループに入る必要があることです。 T の 150 ミリ秒のすべてのグループで常に同じ数の 1 (または K の値) になるとは限りません。つまり、各グループの平均を得るために割る必要がある数は、 150. 150 エントリごとに平均ミリ秒値を計算するためにループを使用する必要があることはわかっていますが、分割数 (1 または「オン」が割り当てられた 150 の各グループのエントリ数) を取得するにはどうすればよいですか?ループの反復ごとに変更しますか? T と M をバインドして、M に 1 がある場合は常に K からの必要な値のみを使用し、単純なカウンターを使用して平均化する方法はありますか?
複雑な問題ではありませんが、説明するのは非常に困難です。ごめんなさい!できる限り明確に説明したいと思います。最初に質問があると思いますが、どんな助けもいただければ幸いです。
どうもありがとうございました!