擅长:python、mysql、java
<p>首先,你考虑的太多了。<code>np.zeros(dShape)</code>将执行您想要的操作,无论{<cd2>}是一维数组还是二维数组。(在一维数组的情况下,<code>dShape</code>将是一个单元素元组,<code>zeros</code>知道如何处理它。)</p>
<p>第二,停止在if语句的行尾和括号中使用分号。这是Python,你不需要它们。在</p>
<p>至于重复代码,我会将<code>for row, value in ...</code>循环中的所有内容抽象为迭代器。在</p>
<p>所以:</p>
<pre><code>import numpy as np
def average_iterator(data, windowSize):
rSum = 0.0
for row, value in enumerate(data):
if row < windowSize:
rSum += float(value)
else:
rSum = rSum - data[row-windowSize] + value
yield row, rSum / windowSize
def running_average(data, windowSize):
dShape = np.shape(data)
raOut = np.zeros(dShape)
if len(dShape) == 1:
for row, avg in average_iterator(data, windowSize):
raOut[row] = avg
else:
for col in xrange(dShape[1]):
for row, avg in average_iterator(data[:,col], windowSize):
raOut[row, col] = avg
return raOut
</code></pre>
<p>您还可以在<code>running_average</code>内使<code>average_iterator</code>成为本地定义,在这种情况下,您不必传入<code>windowSize</code>。在</p>