Mijn vraag
Ik heb een lange 1 dimensional array (lengte > 1.5miljoen) die ik wil opsplitsen in verspringende arrays van lengte 600 en die plaatsen in een matrix. Om een idee te geven:
Op zich kan middels numpy.copy() of rechtstreeks uit de array ([0:600], [1:601], etc even de starts en einde buiten beschouwing gelaten) halen en dat werkt. Maar qua performance duurt dat erg lang. Op zich niet erg, maar wel als je deze exercitie dan ook weer een aantal duizenden keren moet herhalen.
Om een idee te geven, de methode die ik nu gebruik duurt het vullen van de matrix in de orde van 15 tot 20 seconden. De code die ik nu gebruik (snippet):
Relevante software en hardware die ik gebruik
Ik gebruik python (3.6) en numpy in een pycharm omgeving
Wat ik al gevonden of geprobeerd heb
De oplossing zoals hierboven, maar ik zoek een optimalisatie van deze code.
Ik heb een lange 1 dimensional array (lengte > 1.5miljoen) die ik wil opsplitsen in verspringende arrays van lengte 600 en die plaatsen in een matrix. Om een idee te geven:
code:
1
2
3
4
5
6
7
8
9
10
| # (lengte 1.5 miljoen of meer) initial array = [1,2,4,6,4,3,7,8,9,34,47,8,2,....45,2,5,67] #matrix n x 600 matrix = [[1, 0, 0, 0,0 ,0, 0,....], [2,1,0,0,0,0,0,0,....], [4,2,1,0,0,0,0,0,....], [6,4,2,1,0,0,0,0,....], .... ] |
Op zich kan middels numpy.copy() of rechtstreeks uit de array ([0:600], [1:601], etc even de starts en einde buiten beschouwing gelaten) halen en dat werkt. Maar qua performance duurt dat erg lang. Op zich niet erg, maar wel als je deze exercitie dan ook weer een aantal duizenden keren moet herhalen.
Om een idee te geven, de methode die ik nu gebruik duurt het vullen van de matrix in de orde van 15 tot 20 seconden. De code die ik nu gebruik (snippet):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| f_load = np.array(F_vector) # de lange vector n_location = 600 # locations in the model start = 0 f_matrix = [] while True: f_temp = np.zeros(n_location) if start < n_location: f_temp[0:start + 1] = f_load[0:start + 1][::-1] elif start >= n_location: f_temp[n_location-len(f_load[max(0,start-n_location-1):start-1][::-1]):n_location] = f_load[max(0,start-n_location-1):start-1][::-1] else: f_temp = f_load[max(0,start-n_location-1):start-1][::-1] if np.count_nonzero(f_temp) >0: f_matrix.append(np.array(f_temp)) start += 1 if start > n_location + len(f_load): break |
Relevante software en hardware die ik gebruik
Ik gebruik python (3.6) en numpy in een pycharm omgeving
Wat ik al gevonden of geprobeerd heb
De oplossing zoals hierboven, maar ik zoek een optimalisatie van deze code.