2013-05-10 86 views
0

我已经在互联网上彻底查看了这个问题的答案,但它似乎对于其他任何地方的答案都太具体。这是我的最后一站。实现这个循环的正确方法是什么?

为序言,这是不是家庭作业问题,但它改编自网上Coursera课程,其竞猜已经过去了。我得到了正确的答案,但主要是运气。此外,它是一门普遍的编程问题,而不是与课程相关的任何问题,所以我知道一个事实,即我有权在公共论坛上提问。

最后一件事是我试图在MatLab中做到这一点;但是如果你有一个用C++或者Python或者其他任何高级语言编写的答案,那将是非常棒的,因为我可以很容易地将这些解决方案调整为MatLab语法。

这:

我有两个向量,T和M,每600000元件/条目/整数。

T按从小到大的顺序从1到600,000进入,M中的每个元素代表T中每个相应毫秒输入的'on'或'off'(分别输入为1或0)。因此, 1和0的M对应于从T到1到600,000的特定毫秒。

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

我尝试:

原来只有53583随机1在M(出了60万项,其余为0)。我使用'find'操作符从M中提取这些条目为1,并将其从具有与T相对应的毫秒值的新向量K中提取出来。因此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所需的值,然后只用一个简单的计数器来平均?

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

非常感谢!

回答

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 

-Rob

相关问题