切割其索引不相同的多个数组

时间:2016-08-08 06:17:15

标签: python numpy

我有四个时间序列信号在不同时间打开,之后在不同时间关闭。 时间= [(0,23),(5,15),(9,20),(12,25)]

例如,channel0在时间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])]

1 个答案:

答案 0 :(得分: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]