0

我已经在互联网上彻底查看了这个问题的答案,但对于其他任何地方的答案来说似乎太具体了。这是我的最后一站。

首先,这不是家庭作业问题,而是改编自 Coursera 在线课程,其测验已经通过我得到了正确的答案,但主要是运气。此外,这更像是一个一般性的编程问题,而不是与课程相关的任何问题,所以我知道我有权在公共论坛上提问。

最后一件事是我正在尝试在 MatLab 中执行此操作;但是,如果您有 C++ 或 Python 或任何其他高级语言的答案,那就太好了,因为我可以轻松地将这些解决方案调整为 MatLab 语法。

这里是:

我有两个向量,T 和 M,每个向量都有 600,000 个元素/条目/整数。

T 以毫秒为单位从 1 到 600,000 以升序输入,M 中的每个元素代表 T 中每个对应的毫秒条目的“开”或“关”(分别输入 1 或 0)。所以在其中有随机的 1 和 0 M 对应于 T 中从 1 到 600,000 的特定毫秒。

我需要从 T 的第 150 毫秒开始,以 150 个元素/毫秒的增量从那里开始(包括),这些 150 组的平均毫秒值,但只有那些条目为 M 中的 1 的毫秒('on ')。例如,我需要查看 T 中的前 150 毫秒,查看 M 中哪些值为 1,然后对它们进行平均。然后我需要再次使用 T 中的条目 151 到 300,然后是 301 到 450,等等。这些新的平均值也应该存储在一个新的向量中。问题是,对于 T 中的每组 150 毫秒,M 中相应 1 的数量并不相同。(是的,我们正在尝试平均毫秒的实际值,所以我们使用的值平均和 T 中条目的顺序将相同)。

我的尝试:

事实证明,M 中只有 53,583 个随机 1(在 600,000 个条目中,其余为 0)。我使用“查找”运算符从 M 中提取那些为 1 的条目到一个新向量 K 中,该向量具有与 T 对应的毫秒值。所以 K 看起来像一堆按升序排列的随机数,它只是一个列表T 中所有“开启”的毫秒(在 M 中分配 1)。

所以 K 看起来像 [2 5 11 27 39 40 79 ...... 599,698 599,727 等](所有毫秒值都是 M 中的 1)。

所以我有向量 K,它是我需要以 150 个为一组进行平均的所有值,但问题是我需要基于向量 T(1 到 600,000)以 150 个为一组进行平均,这意味着赢了'在 T 中的每组 150 毫秒中并不总是相同数量的 1(或 K 中的值),这反过来意味着我需要除以得到每组平均值的数字将随着每组的变化而变化150. 我知道我需要使用一个循环来计算每 150 个条目的平均毫秒值,但我如何获得除数(每组 150 个被分配 1 或“on”的条目数)在循环的每次迭代中改变?有没有办法将 T 和 M 绑定在一起,以便它们只在 M 中有 1 时使用 K 中的必要值,然后只使用一个简单的计数器来平均?

这不是一个复杂的问题,但很难解释。对于那个很抱歉!我希望我尽可能清楚地解释。任何帮助将不胜感激,尽管我相信您首先会有问题。

非常感谢!

4

1 回答 1

0

我认为这应该可以。

sz = length(T);
n = sz / 150; 
K = T.*M';

t = 1;
aver = zeros(n-1,1); % Your result vector

for i = 1:150:sz-150
  aver(t) = mean(K(i:(i+150)-1));
  t = t + 1;
end

-抢

于 2013-05-10T17:34:48.377 回答