<p>正如@RootTwo所建议的,clip()是一个很好的numpy内置程序。但出于性能原因,可以对数据的三维“堆栈”使用矢量化操作。你知道吗</p>
<p>示例:</p>
<pre><code>import numpy as np
#simulating your data as a list of 3247 2D matrices, each 197x10
some_data = [np.random.randint(-2,2,(197,10)) for _i in range(3247)]
#stack the matrices
X = np.dstack(some_data)
print(X.shape)
</code></pre>
<blockquote>
<p>(197, 10, 3247)</p>
</blockquote>
<pre><code>Y = X.clip(0,1)
Z = Y.sum(axis=2)
#Z is now the output you want!
print(Z.shape)
</code></pre>
<blockquote>
<p>(197, 10)</p>
</blockquote>
<p><strong>编辑:添加计时结果并更改我的答案</p>
<p>因此,我的建议似乎是创建一个深度堆栈并使用clip和sum函数的单个应用程序,这是不明智的。我运行了一些计时测试,发现增量方法更快,这很可能是由于分配大的3D数组的分配时间开销造成的。你知道吗</p>
<p>下面是测试,我将数据加载方面分解出来,因为这两种方式都是一样的。下面是ipython中使用<code>%timeit</code>宏比较这两种方法的结果。你知道吗</p>
<pre><code>import numpy as np
# some_data is simulated as in the above code sample
def f1(some_data):
x = some_data[0]
x = x.clip(0,1)
for y in some_data[1:]:
x += y.clip(0,1)
return x
def f2(some_data):
X = np.dstack(some_data)
X = X.clip(0,1)
X = X.sum(axis=2)
return X
%timeit x1 = f1(some_data)
</code></pre>
<blockquote>
<p>10 loops, best of 3: 28.1 ms per loop</p>
</blockquote>
<pre><code>%timeit x2 = f2(some_data)
</code></pre>
<blockquote>
<p>10 loops, best of 3: 103 ms per loop</p>
</blockquote>
<p>因此,这是一个3.7倍的加速通过做这个过程的增量,而不是作为一个单一的操作后,堆叠的数据。你知道吗</p>