我想一次将函数应用于单维数组3个元素,并为每个元素输出单个元素.
例如,我有一个包含13个元素的数组:
a = np.arange(13)**2
Run Code Online (Sandbox Code Playgroud)
我想应用一个函数,让我们以np.std为例.
这是等效的列表理解:
[np.std(a[i:i+3]) for i in range(0, len(a),3)]
[1.6996731711975948,
6.5489609014628334,
11.440668201153674,
16.336734339790461,
0.0]
Run Code Online (Sandbox Code Playgroud)
有没有人知道使用numpy函数更有效的方法?
最简单的方法是重塑它并沿轴应用该功能.
import numpy as np
a = np.arange(12)**2
b = a.reshape(4,3)
print np.std(b, axis=1)
Run Code Online (Sandbox Code Playgroud)
如果你需要比这更好的性能,你可以试试stride_tricks.除了使用stride_tricks之外,下面与上面相同.我对性能提升感到错误,因为正如您在下面看到的那样,b与b上面的视图完全相同.如果他们编译成完全相同的东西,我不会感到惊讶.
import numpy as np
a = np.arange(12)**2
b = np.lib.stride_tricks.as_strided(a, shape=(4,3), strides=(a.itemsize*3, a.itemsize))
print np.std(b, axis=1)
Run Code Online (Sandbox Code Playgroud)