मैं एक पांडा डेटा फ्रेम निम्नलिखित तरीके से बनाई गई है:फास्ट विकल्प पांडा DataFrame में सभी पंक्तियों के ऊपर एक numpy आधारित समारोह को चलाने के लिए
import pandas as pd
def create(n):
df = pd.DataFrame({ 'gene':["foo",
"bar",
"qux",
"woz"],
'cell1':[433.96,735.62,483.42,10.33],
'cell2':[94.93,2214.38,97.93,1205.30],
'cell3':[1500,90,100,80]})
df = df[["gene","cell1","cell2","cell3"]]
df = pd.concat([df]*n)
df = df.reset_index(drop=True)
return df
यह इस तरह दिखता है: तो फिर
In [108]: create(1)
Out[108]:
gene cell1 cell2 cell3
0 foo 433.96 94.93 1500
1 bar 735.62 2214.38 90
2 qux 483.42 97.93 100
3 woz 10.33 1205.30 80
मैं
: एक समारोह है कि एक निश्चित स्कोर की गणना करने के लिए प्रत्येक जीन (पंक्ति) के मूल्यों लेता है 210import numpy as np
def sparseness(xvec):
n = len(xvec)
xvec_sum = np.sum(np.abs(xvec))
xvecsq_sum = np.sum(np.square(xvec))
denom = np.sqrt(n) - (xvec_sum/np.sqrt(xvecsq_sum))
enum = np.sqrt(n) - 1
sparseness_x = denom/enum
return sparseness_x
असल में मुझे इस समारोह को पंक्तियों पर 40K पर लागू करने की आवश्यकता है।
In [109]: df = create(10000)
In [110]: express_df = df.ix[:,1:]
In [111]: %timeit express_df.apply(sparseness, axis=1)
1 loops, best of 3: 8.32 s per loop
कि लागू करने के लिए तेजी से विकल्प क्या है: और वर्तमान में यह बहुत धीमी गति से उपयोग करते हुए पांडा 'लागू करें' चलाता है?