Mam zestaw danych, gdzie każdy próbki ma strukturę podobną do tejwydajny algorytm zamiast zapętlenie
X=[ [[],[],[],[]], [[],[]] , [[],[],[]] ,[[][]]]
na przykład:
X=np.array([ [ [1,2,3], [2,4,5] ,[2,3,4] ] , [ [5,6], [6,6] ] , [[2,3,1],[2,3,10],[23,1,2],[1,4,5]] ] ,"object")
Y=np.array([ [ [12,14,15] ,[12,13,14] ] , [ [15,16], [16,16] ] , [[22,23,21],[32,33,11],[12,44,55]] ] ,"object")
więc dla każda próbka muszę obliczyć kropka pomiędzy każdym elementem x z odpowiednim elementem y tego samego indeksu i suma wyniku. tj:
result=0
for i in range(3):
for n,m in itertools.product(X[i],Y[i]):
print "%s, %s" % (n,m)
result+=np.dot(n,m)
.....:
[1, 2, 3], [12, 14, 15]
[1, 2, 3], [12, 13, 14]
[2, 4, 5], [12, 14, 15]
[2, 4, 5], [12, 13, 14]
[2, 3, 4], [12, 14, 15]
[2, 3, 4], [12, 13, 14]
[5, 6], [15, 16]
[5, 6], [16, 16]
[6, 6], [15, 16]
[6, 6], [16, 16]
[2, 3, 1], [22, 23, 21]
[2, 3, 1], [32, 33, 11]
[2, 3, 1], [12, 44, 55]
[2, 3, 10], [22, 23, 21]
[2, 3, 10], [32, 33, 11]
[2, 3, 10], [12, 44, 55]
[23, 1, 2], [22, 23, 21]
[23, 1, 2], [32, 33, 11]
[23, 1, 2], [12, 44, 55]
[1, 4, 5], [22, 23, 21]
[1, 4, 5], [32, 33, 11]
[1, 4, 5], [12, 44, 55]
To cały mój kod:
print "***build kernel***"
K = np.zeros((n_samples, n_samples))
for i in range(n_samples):
for j in range(n_samples):
K[i,j] = self.kernel(X[i], X[j])
def kernel(x1,x2):
N=8 #number of objects
result=0
for i in xrange(N):
for n,m in itertools.product(x1[i],x2[i]):
result+=np.dot(n,m)
return result
jak widać złożoność tego algorytmu jest zbyt wysoka, a także moje próbki są znacznie większe niż to. więc nawet dla małego zestawu danych, tj. zawierającego 400 próbek, muszę poczekać 4 godziny, aby uzyskać wynik. Szukam lepszego sposobu wdrożenia tego algorytmu. P.S: Myślałem o wielowątkowości lub multiproccessingu, ale nie jestem pewien, czy to pomaga ?!
Doceniam każdą sugestię!
jaki sposób problem rozwijać? Kiedy mówisz, że 200 próbek zajmuje 4 godziny, masz na myśli, że na przykład 'X [i]' i 'Y [i]' mają po 200 wektorów? – Claudiu
Twój "cały kod" nie odnosi się do "Y". –
X i y to tylko przykłady .. widzisz x1 i x2 w kodzie – Moj