小编Bri*_*ack的帖子

从 Meshgrid 重塑 Pandas DataFrame

如果我构造一个熊猫数据帧如下:

import numpy as np
import pandas as pd

x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
df = pd.DataFrame(z, index=x, columns=y)
Run Code Online (Sandbox Code Playgroud)

我现在有一个 41x41 的 DataFrame,其中每个值对应一个 x,y 对。我想重塑这个 DataFrame 以便我有 3 列(X、Y、Z)和 1681 行,并带有一个范围从 0-1680 的新任意索引。

作为旁注,如果我的数据框已经处于所需的形式,我相信这与撤消 df.pivot('X','Y','Z') 相同,但我不确定如何完成此操作以及。

python numpy pandas

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

numba guvectorize target ='parallel'慢于target ='cpu'

我一直在尝试优化一段涉及大型多维数组计算的python代码.我对numba的结果有违反直觉.我正在运行MBP,2015年中期,2.5 GHz i7 quadcore,OS 10.10.5,python 2.7.11.考虑以下:

 import numpy as np
 from numba import jit, vectorize, guvectorize
 import numexpr as ne
 import timeit

 def add_two_2ds_naive(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @jit
 def add_two_2ds_jit(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @guvectorize(['float64[:,:],float64[:,:],float64[:,:]'],
    '(n,m),(n,m)->(n,m)',target='cpu')
 def add_two_2ds_cpu(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 @guvectorize(['(float64[:,:],float64[:,:],float64[:,:])'],
    '(n,m),(n,m)->(n,m)',target='parallel')
 def add_two_2ds_parallel(A,B,res):
     for i in range(A.shape[0]):
         for j in range(B.shape[1]):
             res[i,j] = A[i,j]+B[i,j]

 def …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numexpr numba

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

标签 统计

python ×2

numba ×1

numexpr ×1

numpy ×1

pandas ×1

parallel-processing ×1