2016-08-08 14 views
0

Ich habe vier Zeitreihen Signale, die zu verschiedenen Zeiten an und später auch zu verschiedenen Zeiten ausschaltet. Zeit = [(0,23), (5,15), (9,20), (12,25)]Slicing mehrere Arrays, wo ihre Indizes nicht die gleichen sind

Zum Beispiel wurde Kanal 0 zur Zeit 0 eingeschaltet und nach 23 Sekunden ausgeschaltet. Kanal zwei eingeschaltet um Zeit = 5 Sekunden und ausgeschaltet um 15.

Ich möchte jedes Array nach ihrem Inhalt in der folgenden Zeit Raster: [(0,4), (5,8), (9 , 11), (12,14), (15,19), (20,22), (23,24)] Wenn das Signal noch nicht begonnen hat oder das Signal vorbei ist, möchte ich, dass meine Liste ein enthält leerer Schlitz.

Schließlich möchte ich eine Liste ähnlich Signal0, Signals1, Signal2, Signals3 produzieren. das Zeitraster wäre

hier ein minimales Beispiel ist mein Problem beschreibt:

import numpy as np 
Signals=[np.random.normal(0,1,23),np.random.normal(0,1,10),np.random.normal(0,1,11),np.random.normal(0,1,13)] 
np.set_printoptions(precision=3) 
print Signals 
time = [(0,23),(5,15),(9,20),(12,25)] 
print time 
Signals0=[[-0.585, 0.005, -0.932, -0.322, -0.527], 
     [0.246, 1.95 , -0.673,0.389] 
     [0.285,0.245, 1.226], 
     [0.41,-0.184, 1.642], 
     [0.463,0.813, 0.021, 0.531, -0.59], 
     [0.694, -0.528, 0.924], 
     [] 
     ] 
Signals1 = [[], 
      [ 0.74 , -0.692, -0.302, 0.558], 
      [0.475, -1.605, 0.438], 
      [ -1.106,-0.02 , 0.042], 
      [], 
      [], 
      [] 
] 
Signals2 = [[], 
      [], 
      [1.435, 0.855, -2.098], 
      [0.532, -0.596, 1.415], 
      [0.727, 0.617,-1.88 , -1.203, -0.918], 
      [], 
      [] 
    ] 
Signals3 = [[], 
      [], 
      [], 
      [2.462, -1.198, -0.098], 
      [-2.152, 1.081, -0.519, 0.675, -0.077], 
      [1.491, 0.071, -0.267, 1.243], 
      [-1.507] 

    ] 

Dies ist, wie meine Kanäle aussehen

[array([-0.585, 0.005, -0.932, -0.322, -0.527, 0.246, 1.95 , -0.673, 
     0.389, 0.285, 0.245, 1.226, 0.41 , -0.184, 1.642, 0.463, 
     0.813, 0.021, 0.531, -0.59 , 0.694, -0.528, 0.924]), array([ 0.74 , -0.692, -0.302, 0.558, 0.475, -1.605, 0.438, -1.106, 
     -0.02 , 0.042]), array([ 1.435, 0.855, -2.098, 0.532, -0.596, 1.415, 0.727, 0.617, 
     -1.88 , -1.203, -0.918]), array([ 2.462, -1.198, -0.098, -2.152, 1.081, -0.519, 0.675, -0.077, 
     1.491, 0.071, -0.267, 1.243, -1.507])] 
+0

Ich verstehe nicht, wo Ihr Beispiel herkommt oder was ist die Logik dahinter. Bitte geben Sie eine klare [mcve]. Ein Beispiel mit lokal generierten Zufallswerten ist wenig aussagekräftig ... – Julien

+0

Ich habe 4 Audiodateien, die an verschiedenen Instanzen beginnen und an verschiedenen Instanzen enden. Ich möchte den Teil des Arrays, der in einem bestimmten Zeitfenster passiert ist, in die gleiche Listenposition bringen. Die erste Position in der Signal0-Liste repräsentiert also den Teil des Signals, der zwischen der Zeit 0 und 4 Sekunden aufgetreten ist. @Julien Bernu – MAS

+0

Also, was ist falsch mit grundlegenden Slicing? – Julien

Antwort

1

Erste Großbuchstaben nicht für Variablennamen verwenden also signals und nicht Signals.

all_signals = [[s[slice(max(0,lg-lt),max(0,ug-lt+1))] for (lg,ug) in grid] for (lt,ut),s in zip(time, signals)] 

for i,s in enumerate(all_signals): 
    print "\nsignal",i 
    for g in s: 
     print g 

gibt:

signal 0 
[-0.585 0.005 -0.932 -0.322 -0.527] 
[ 0.246 1.95 -0.673 0.389] 
[ 0.285 0.245 1.226] 
[ 0.41 -0.184 1.642] 
[ 0.463 0.813 0.021 0.531 -0.59 ] 
[ 0.694 -0.528 0.924] 
[] 

signal 1 
[] 
[ 0.74 -0.692 -0.302 0.558] 
[ 0.475 -1.605 0.438] 
[-1.106 -0.02 0.042] 
[] 
[] 
[] 

signal 2 
[] 
[] 
[ 1.435 0.855 -2.098] 
[ 0.532 -0.596 1.415] 
[ 0.727 0.617 -1.88 -1.203 -0.918] 
[] 
[] 

signal 3 
[] 
[] 
[] 
[ 2.462 -1.198 -0.098] 
[-2.152 1.081 -0.519 0.675 -0.077] 
[ 1.491 0.071 -0.267] 
[ 1.243 -1.507] 
Verwandte Themen