Seite 1 von 1

Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Freitag 17. April 2020, 10:41
von Bayne
Hey liebe Forum User,

Ich versuche bereits seid Stunden eine Lösung zu finden:

Ich habe:
eine liste (kann ruhig auch zu np.array umgewandelt werden wenns schneller geht) & 2 np.arrays (aus Integern welche ich als Index verwenden will) .
für jedes Element in meinen werten soll ein Slice von Wert[start] bis Wert[end] erstellt werden. So klappts:

Code: Alles auswählen

import numpy as np
result = [    werte[ start: end]    for    start,end    in    zip(start_ix, end_Ix) ]  
Nun sollte das ganze aber aus Performance gründen mit numpy vektorisiert werden. Da fromiter nur 1d-arrays erstellt habe ich nur folgenden Ansatz finden können:

Code: Alles auswählen

from itertools import chain
result = [    np.fromiter(    chain.from_iterable(   werte[ start: end]    for   start,end   in    zip(start_ix, end_Ix)    )   , '1',-1)   ]  
Das klappt leider nicht. bekomme nur ein leeres Array.

Was kann ich stattdessen tun?
Oder warum klappt es nicht

Vielen Dank und bleiben Sie gesund.
Bayne

Re: Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Freitag 17. April 2020, 10:58
von Sirius3
Also der Abstand von Start zu End ist immer gleich? Sonst wird das ja kein 2d-Array.
Können sonst die Start-Indexe beliebig sein, oder gibt es da auch eine Regelmäßigkeit?
Das from-iter macht in der Geschwindigkeit keinen Unterschied.

Wie sehen die Arrays genau aus, von welchen Größen reden wir hier? Wie hast Du das Erstellen gebenchmarkt und welche Operation ist Dir dabei zu langsam?

Re: Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Freitag 17. April 2020, 11:12
von Bayne
Sirius3 hat geschrieben: Freitag 17. April 2020, 10:58 Also der Abstand von Start zu End ist immer gleich? Sonst wird das ja kein 2d-Array.
Können sonst die Start-Indexe beliebig sein, oder gibt es da auch eine Regelmäßigkeit?
Das from-iter macht in der Geschwindigkeit keinen Unterschied.

Wie sehen die Arrays genau aus, von welchen Größen reden wir hier? Wie hast Du das Erstellen gebenchmarkt und welche Operation ist Dir dabei zu langsam?
Abstand von Start zu End variiert, Start Indizes sind Zeitwerte (mit Lücken) genauso die End Indizes, also keine Regelmäßigkeit
ArrayGrößen sind nach oben offen bis in die millionenlänge

Re: Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Freitag 17. April 2020, 12:29
von Sirius3
Wie soll dann daraus ein 2d-Array werden?

Re: Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Freitag 17. April 2020, 19:52
von Bayne
@Sirius3
Zitat:
So klappts:

Code: Alles auswählen

import numpy as np
result = [    werte[ start: end]    for    start,end    in    zip(start_ix, end_Ix) ] 
start und end sind Integer.
nur Werte ist eine Zeitreihe, falls ich mich unverständlich ausgedrückt hab.

für jede Reige in den Indizes zip(start_ix, end_Ix) will ich einen Slice der von "start" bis "end" geht ( wobei es sich um ints aus zip(start_ix, end_Ix) handelt).
Das klappt ja So wie ich es oben geschrieben habe (als List comprehension).

Nur leider klappts nicht als Numpy version mit bspw. fromiter().
Bevor jmd was sagt. JA ich weiß dass fromiter nur 1d-Arrays erstellen kann, deshalb suche ich ja nach einer Alternative die diese Listcomprehension in schnelleren Numpy code umwandeln kann.

Re: Numpy 1d array zu 2d array durch Slicing, warum klappts nicht?

Verfasst: Samstag 18. April 2020, 11:09
von Sirius3
Und wie ich schon geschrieben habe, wird das nicht schneller gehen.
Daher nochmal die Frage: wie hast Du gemessen, was wieviel Zeit braucht, und welche Operation ist Dir zu langsam.
Um dann weiter helfen zu können, braucht man auch ein sehr konkretes Beispiel.