Использование Numba для ускорения GPU с большим файлом Excel - PullRequest
0 голосов
/ 21 ноября 2018

У меня минимальный опыт использования графических процессоров, и после поиска в Интернете я пришел к следующему:

import pandas as pd
from haversine import haversine
import numpy as np
from pandas import ExcelWriter
import numba as nb

np.set_printoptions(precision=20)


path = 'distance.xlsx'
df = pd.read_excel(path)
df = df.assign(Dist=pd.Series(np.zeros(27055)).values);
#df = df.assign(Facility=pd.Series(np.zeros(27055)).values);
df = df.assign(Facility=pd.Series(np.zeros((27055,),dtype='float,float')).values);
df["Facility_city"] = ""

#idx = np.asarray(df.loc[df["lat1"] != '.'].ix[:,0].index)
#temp1 = 1e10
#j = 0

idx = np.asarray(df[(df['lat1']!='.') & (df['state']== df['state'][0])].index)

@nb.jit(nopython=True)
def f(df):
    temp1 = 1e10
    j = 0
    for i in range(0, len(df)):

        if df['state'][i+1] != df['state'][i]:
            idx = np.asarray(df[(df['lat1']!='.') & (df['state']== df['state'][i+1])].index)

        #while (df.iloc[idx[j]]['state'] == df.iloc[i]['state']):     
        while (j!=len(idx)):

            p1 = (df.iloc[idx[j]]['lat1'],df.iloc[idx[j]]['long1'])
            p2 = (df.iloc[i]['lat2'],df.iloc[i]['long2'])
            df.Dist.iloc[i] = min(temp1,haversine(p1, p2, miles=True))

            if df.Dist.iloc[i] < temp1:
                #df.Facility.iloc[i] = idx[j]
                df.Facility.iloc[i] = (p1[0],p1[1])
                df.Facility_city.iloc[i] = df.city.iloc[idx[j]]

            temp1 = df.Dist.iloc[i]
            j+=1

        j = 0            
        temp1 = 1e10
    return df

if __name__ == "__main__":

    df = f(df)
    writer = ExcelWriter('Results.xlsx')
    df.to_excel(writer,'Sheet1')
    writer.save()

for loop работает около 30 000 раз.Следовательно, я склонен использовать графический процессор (через Floydhub). Я изо всех сил пытаюсь настроить свой код для того же самого.

Когда я выполняю это, я получаю ошибку.

Traceback (most recent call last):

  File "<ipython-input-8-1a4900ad9325>", line 1, in <module>
    runfile('/Users/deepayanbhadra/Downloads/Chotka /Chotka.py', wdir='/Users/deepayanbhadra/Downloads/Chotka ')

  File "/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "/anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/deepayanbhadra/Downloads/Chotka /Chotka.py", line 60, in <module>
    df = f(df)

  File "/anaconda3/lib/python3.6/site-packages/numba/dispatcher.py", line 344, in _compile_for_args
    reraise(type(e), e, None)

  File "/anaconda3/lib/python3.6/site-packages/numba/six.py", line 658, in reraise
    raise value.with_traceback(tb)

TypingError: cannot determine Numba type of <class 'function'>

Как мне обойти это?Я думаю, что numba - лучший фреймворк из ссылок, но любой другой (например, PyCUDA) тоже подойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...