我想一次将一个函数应用于一维数组3个元素,并为每个元素输出一个元素。
例如,我有一个包含13个元素的数组:a = np.arange(13)**2
我想申请一个函数,比如以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]
有没有人知道使用numpy函数的更有效方法?
答案 0 :(得分:5)
最简单的方法是重塑它并沿轴应用该功能。
import numpy as np
a = np.arange(12)**2
b = a.reshape(4,3)
print np.std(b, axis=1)
如果你需要比这更好的表现,你可以尝试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)
答案 1 :(得分:0)
答案 2 :(得分:0)
你可以重塑它。但这确实要求尺寸不变。如果您可以在最后处理一些虚假条目,您可以这样做:
[np.std(s) for s in a.reshape(-1,3)]