2016-08-08 12 views
0

私は4つの時系列信号を異なる時間にオンにし、後で異なる時間にオフにします。例えば、チャネル0は時間0でオン、時間23でオフになる。例えば、チャネル0は時間0でオン、時間23ではオフである。チャネル2は時間= 5秒でオンになり、15でオフになります。インデックスが同じでない複数の配列をスライスする

各アレイを次の時間グリッドの内容に従ってセグメント化します。 [(0,4)、(5,8)、(9) 、11)、(12,14)、(15,19)、(20,22)、(23,24)] 信号がまだ開始していないか、信号が終了している場合は、空きスロット。

最終的に、Signals0、Signals1、Signal2、Signals3のようなリストを作成したいと思います。

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] 

    ] 

これは私のチャンネルは、変数名の大文字を使用していない

[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

。明確な[mcve]を付けてください。ローカルで生成されたランダムな値を使用した例は、パワーをほとんど説明していません。 – Julien

+0

私は4つのオーディオファイルを持ち、それぞれ異なるインスタンスで開始し、異なるインスタンスで終了します。私は同じリストの位置に特定のタイムスロットで起こった配列の部分を入れたいです。 Signal0リストの最初の位置は、0〜4秒の間に発生した信号の部分を表します。 @Julien Bernu – MAS

+0

だから、基本的なスライスで何が問題になっていますか? – Julien

答えて

1

まずどのように見えるかです: 時間グリッドは、ここで

は私の問題を記述し、最小限の例であるだろう従って signalsではなく 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 

ができます:あなたの例では、から来ているか、その背後にあるロジックは何です私は理解していない

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] 
関連する問題