У меня минимальный опыт использования графических процессоров, и после поиска в Интернете я пришел к следующему:
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) тоже подойдет.