相关疑难解决方法(0)

为什么numpy的einsum比numpy的内置函数更快?

让我们从三个数组开始dtype=np.double.使用numpy 1.7.1在intel CPU上执行计时,编译icc并链接到intel mkl.带有numpy 1.6.1的AMD cpu与gccwithout 编译mkl也用于验证时序.请注意,时序与系统大小几乎呈线性关系,并不是由于numpy函数if语句中产生的小开销,这些差异将以微秒而非毫秒显示:

arr_1D=np.arange(500,dtype=np.double)
large_arr_1D=np.arange(100000,dtype=np.double)
arr_2D=np.arange(500**2,dtype=np.double).reshape(500,500)
arr_3D=np.arange(500**3,dtype=np.double).reshape(500,500,500)
Run Code Online (Sandbox Code Playgroud)

首先让我们看一下这个np.sum函数:

np.all(np.sum(arr_3D)==np.einsum('ijk->',arr_3D))
True

%timeit np.sum(arr_3D)
10 loops, best of 3: 142 ms per loop

%timeit np.einsum('ijk->', arr_3D)
10 loops, best of 3: 70.2 ms per loop
Run Code Online (Sandbox Code Playgroud)

鲍尔斯:

np.allclose(arr_3D*arr_3D*arr_3D,np.einsum('ijk,ijk,ijk->ijk',arr_3D,arr_3D,arr_3D))
True

%timeit arr_3D*arr_3D*arr_3D
1 loops, best of 3: 1.32 s per loop

%timeit np.einsum('ijk,ijk,ijk->ijk', arr_3D, arr_3D, arr_3D)
1 loops, best of 3: 694 ms per loop
Run Code Online (Sandbox Code Playgroud)

外产品:

np.all(np.outer(arr_1D,arr_1D)==np.einsum('i,k->ik',arr_1D,arr_1D)) …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy multidimensional-array

69
推荐指数
4
解决办法
9732
查看次数

逐列相关函数?

我有两个 numpy 数组

X.shape = (100, 10)
Y.shape = (100, 10)
Run Code Online (Sandbox Code Playgroud)

我想找到 X 和 Y 列之间的皮尔逊相关性

IE

from scipy.stats.stats import pearsonr

def corr( X, Y ):
    return np.array([ pearsonr( x, y )[0] for x,y in zip( X.T, Y.T ) ] )    

corr( X, Y ).shape = (10, )
Run Code Online (Sandbox Code Playgroud)

有这个功能吗?到目前为止,我能找到的所有函数都可以计算相关矩阵。Matlab 中有一个成对相关函数,所以我很确定一定有人为 Python 编写了一个。

我不喜欢上面的示例函数的原因是它看起来很慢。

python numpy scipy

1
推荐指数
1
解决办法
3852
查看次数