如果我构造一个熊猫数据帧如下:
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代码.我对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)