Python 如何将timeseries数据作为numpy ndarray执行重叠窗口化

Python 如何将timeseries数据作为numpy ndarray执行重叠窗口化,python,numpy,multidimensional-array,time-series,Python,Numpy,Multidimensional Array,Time Series,我有一个时间序列数据集作为一个numpy数组的形状: (批次大小、观察值、传感器编号 例如: (3,10,2) 三批两个传感器,每个传感器的时间序列数据长度为10 在这个numpy数组上,我现在想要重塑时间序列的长度,并指定一个重叠因子。 下面是一个示例,尝试从上面更改原始数据集: 每个样本的新周期长度应为5,我希望样本重叠0.4(40%)。为简单起见,时间序列数据为1…10 shape(3,10,2)的原始数据集如下所示: array([[[ 1, 2],[ 3, 4],[ 5, 6],

我有一个时间序列数据集作为一个numpy数组的形状:
(批次大小、观察值、传感器编号

例如:
(3,10,2)
三批两个传感器,每个传感器的时间序列数据长度为10

在这个numpy数组上,我现在想要重塑时间序列的
长度
,并指定一个
重叠
因子。

下面是一个示例,尝试从上面更改原始数据集: 每个样本的新周期长度应为
5
,我希望样本重叠0.4(40%)。为简单起见,时间序列数据为1…10 shape(3,10,2)的原始数据集如下所示:

array([[[ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10],
    [ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10]],
   [[ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10],
    [ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10]],
   [[ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10],
    [ 1,  2],[ 3,  4],[ 5,  6],[ 7,  8],[ 9, 10]]])
我希望新的、经过重塑的numpy阵列具有以下形状:
(6,5,2)
。每个chunck都将如下图所示打开窗口:

重叠:对于新的目标长度5,40%的重叠意味着上一个样本中的两个元素重叠到下一个样本中。
因此,仅使用有效长度时间序列元素进行重塑意味着在上述情况下,通过将原始时间序列分为两个较短的时间序列,并在样本之间重叠,使原始数据量翻倍。
我尝试了两种方法,通过迭代for循环中的所有元素来重塑它,但这需要很多时间,因此我认为必须有一种更有效的方法,例如向量化操作


任何人都能提供帮助和提示吗?谢谢你的建议。

让我们进行6次观察,每3批2个传感器

data = np.arange(3*6).reshape((3,6))[:,:, None] * ((1,1))
size = 3
step = 2
print("data:\n", data)
输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
我猜这是一种优雅的方式。它使用列表理解,这通常比正常的
循环更快,尤其是在这里,因为我不循环数据,而是通过每个窗口的第一个索引

# Range until the last index where it is possible to start a window
last_start = data.shape[1] - size + 1
period_starts = range(0, last_start, step)

reshaped_data = np.concatenate(
                  [data[:,k:k+size] for k in period_starts],
                  axis=1).reshape(-1, size, data.shape[2])
print('Reshaped data:\n', reshaped_data)
输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
如果我们在列表理解过程中不计算时间间隔,可能会更快,尽管此时您可能不需要进一步增强:

period_intervals = np.array((period_starts, period_starts + size)).T
reshaped_data = np.concatenate(
                  [data[:,i:j] for i,j in period_intervals],
                  axis=1).reshape(-1, size, data.shape[2])
或者,您可以使用索引,但在这种情况下,做同样的事情感觉要复杂得多,代码也要复杂得多(请参阅):

输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]

很抱歉,这只是我第一次尝试,才意识到我可以以一种更简单、更优雅的方式使用我以前的(错误的)方法。

让我们进行6次观察,每3批2个传感器

data = np.arange(3*6).reshape((3,6))[:,:, None] * ((1,1))
size = 3
step = 2
print("data:\n", data)
size = 5
step = 3

new_dataset = False

for batch in np.arange(0,data_array.shape[0],1):
    sample_data = data_array[batch].T
    sensor_buffer = False
    for sensor in np.arange(0,sample_data.shape[0],1):
        time_series = sample_data[sensor]
        splitted_timeseries = [time_series[i : i + size] for i in range(0,len(time_series), step)]
        valid_splitts = np.asarray([splitted_ts for splitted_ts in splitted_timeseries if len(splitted_ts)==size])
        valid_splitts = valid_splitts.reshape(valid_splitts.shape[0],
                                          size,
                                          1)
    
        if type(sensor_buffer) == bool:
            sensor_buffer = valid_splitts.copy()
        else:
            sensor_buffer = np.concatenate((sensor_buffer,valid_splitts.copy()),axis=-1)

    if type(new_dataset) == bool:
        new_dataset = sensor_buffer.copy()
        print(new_dataset.shape)
    else:
        new_dataset = np.concatenate((new_dataset,sensor_buffer),axis=0)
new_dataset.shape
输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
我猜这是一种优雅的方式。它使用列表理解,这通常比正常的
循环更快,尤其是在这里,因为我不循环数据,而是通过每个窗口的第一个索引

# Range until the last index where it is possible to start a window
last_start = data.shape[1] - size + 1
period_starts = range(0, last_start, step)

reshaped_data = np.concatenate(
                  [data[:,k:k+size] for k in period_starts],
                  axis=1).reshape(-1, size, data.shape[2])
print('Reshaped data:\n', reshaped_data)
输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
如果我们在列表理解过程中不计算时间间隔,可能会更快,尽管此时您可能不需要进一步增强:

period_intervals = np.array((period_starts, period_starts + size)).T
reshaped_data = np.concatenate(
                  [data[:,i:j] for i,j in period_intervals],
                  axis=1).reshape(-1, size, data.shape[2])
或者,您可以使用索引,但在这种情况下,做同样的事情感觉要复杂得多,代码也要复杂得多(请参阅):

输出:

data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]
  [ 3  3]
  [ 4  4]
  [ 5  5]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]
  [ 9  9]
  [10 10]
  [11 11]]

 [[12 12]
  [13 13]
  [14 14]
  [15 15]
  [16 16]
  [17 17]]]
Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
Indexes of observations:
 [[0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]
 [0 1 2]
 [2 3 4]]

Indexes for batch:
 [[0 0 0]
 [0 0 0]
 [1 1 1]
 [1 1 1]
 [2 2 2]
 [2 2 2]]

Reshaped data:
 [[[ 0  0]
  [ 1  1]
  [ 2  2]]

 [[ 2  2]
  [ 3  3]
  [ 4  4]]

 [[ 6  6]
  [ 7  7]
  [ 8  8]]

 [[ 8  8]
  [ 9  9]
  [10 10]]

 [[12 12]
  [13 13]
  [14 14]]

 [[14 14]
  [15 15]
  [16 16]]]
很抱歉,包括它,这只是我第一次尝试之前,我意识到我可以使用我以前的(错误的)方式在一个更简单和优雅的方式

size = 5
step = 3

new_dataset = False

for batch in np.arange(0,data_array.shape[0],1):
    sample_data = data_array[batch].T
    sensor_buffer = False
    for sensor in np.arange(0,sample_data.shape[0],1):
        time_series = sample_data[sensor]
        splitted_timeseries = [time_series[i : i + size] for i in range(0,len(time_series), step)]
        valid_splitts = np.asarray([splitted_ts for splitted_ts in splitted_timeseries if len(splitted_ts)==size])
        valid_splitts = valid_splitts.reshape(valid_splitts.shape[0],
                                          size,
                                          1)
    
        if type(sensor_buffer) == bool:
            sensor_buffer = valid_splitts.copy()
        else:
            sensor_buffer = np.concatenate((sensor_buffer,valid_splitts.copy()),axis=-1)

    if type(new_dataset) == bool:
        new_dataset = sensor_buffer.copy()
        print(new_dataset.shape)
    else:
        new_dataset = np.concatenate((new_dataset,sensor_buffer),axis=0)
new_dataset.shape
这是我当前的版本,它给出了正确的结果。大小指定了新时间序列的长度和步长(定义重叠的另一种方式)

对于这样的数据集数组:

array([[[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]],

       [[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]],

       [[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]]])
它给出了(6,5,2)的正确形状和有效的时间序列块:

array([[[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]],

       [[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]],

       [[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]]])
这是我当前的版本,它给出了正确的结果。大小指定了新时间序列的长度和步长(定义重叠的另一种方式)

对于这样的数据集数组:

array([[[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]],

       [[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]],

       [[ 1.,  1.],
        [ 2.,  2.],
        [ 3.,  3.],
        [ 4.,  4.],
        [ 5.,  5.],
        [ 6.,  6.],
        [ 7.,  7.],
        [ 8.,  8.],
        [ 9.,  9.],
        [10., 10.]]])
它给出了(6,5,2)的正确形状和有效的时间序列块:

array([[[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]],

       [[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]],

       [[1., 1.],
        [2., 2.],
        [3., 3.],
        [4., 4.],
        [5., 5.]],

       [[4., 4.],
        [5., 5.],
        [6., 6.],
        [7., 7.],
        [8., 8.]]])

这三行应该可以做到这一点:

obs_starts = list(range(0,
                        1+old_obs_len - new_obs_len,
                        int(round((1-overlap)*new_obs_len))))
obs_indices = [list(range(x, x+new_obs_len)) for x in obs_starts]
new_A = A[:, obs_indices, :].reshape(-1, new_obs_len, num_sens)
此处:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
A
是您的数组,具有形状
(num\u batches,old\u obs\u len,num\u sens)

new\u A
是一个新数组,其形状为
(-1,new\u obs\u len,num\u sens)

overlap
是重叠率

请注意,数组没有重复的连接或平铺。因此,在引擎盖下对数组数据的复制最少。前两行用于构建嵌套索引列表。第三行使用此索引“array”对
a
进行索引,并对结果进行塑形

设置演示数据:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
数据设置输出:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1的输出(
打印(新的)
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例2:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例2的输出:(
print(new_A)
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例3:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1的输出(
print(new_A[16:18,:,::])
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]

这三行应该可以做到这一点:

obs_starts = list(range(0,
                        1+old_obs_len - new_obs_len,
                        int(round((1-overlap)*new_obs_len))))
obs_indices = [list(range(x, x+new_obs_len)) for x in obs_starts]
new_A = A[:, obs_indices, :].reshape(-1, new_obs_len, num_sens)
此处:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
A
是您的数组,具有形状
(num\u batches,old\u obs\u len,num\u sens)

new\u A
是一个新数组,其形状为
(-1,new\u obs\u len,num\u sens)

overlap
是重叠率

请注意,数组没有重复的连接或平铺。因此,在引擎盖下对数组数据的复制最少。前两行用于构建嵌套索引列表。第三行使用此索引“array”对
a
进行索引,并对结果进行塑形

设置演示数据:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
数据设置输出:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1的输出(
打印(新的)
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例2:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例2的输出:(
print(new_A)
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例3:

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
测试用例1的输出(
print(new_A[16:18,:,::])
):

import numpy as np

num_batches = 3                              # Initial value
old_obs_len = 20                             # Initial value
num_sens = 2

                                             # Demo data
A = np.arange(num_batches*old_obs_len*num_sens).reshape(num_batches,
                              old_obs_len,
                              num_sens)
print (A.shape)
print (A)
(3, 20, 2)
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.5
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]]

 [[ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]
  [ 36  37]
  [ 38  39]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]]

 [[ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]
  [ 76  77]
  [ 78  79]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]
overlap = 0.2
new_obs_len = 10
[[[  0   1]
  [  2   3]
  [  4   5]
  [  6   7]
  [  8   9]
  [ 10  11]
  [ 12  13]
  [ 14  15]
  [ 16  17]
  [ 18  19]]

 [[ 16  17]
  [ 18  19]
  [ 20  21]
  [ 22  23]
  [ 24  25]
  [ 26  27]
  [ 28  29]
  [ 30  31]
  [ 32  33]
  [ 34  35]]

 [[ 40  41]
  [ 42  43]
  [ 44  45]
  [ 46  47]
  [ 48  49]
  [ 50  51]
  [ 52  53]
  [ 54  55]
  [ 56  57]
  [ 58  59]]

 [[ 56  57]
  [ 58  59]
  [ 60  61]
  [ 62  63]
  [ 64  65]
  [ 66  67]
  [ 68  69]
  [ 70  71]
  [ 72  73]
  [ 74  75]]

 [[ 80  81]
  [ 82  83]
  [ 84  85]
  [ 86  87]
  [ 88  89]
  [ 90  91]
  [ 92  93]
  [ 94  95]
  [ 96  97]
  [ 98  99]]

 [[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]]
overlap = 0.8
new_obs_len = 10
[[[ 96  97]
  [ 98  99]
  [100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]]

 [[100 101]
  [102 103]
  [104 105]
  [106 107]
  [108 109]
  [110 111]
  [112 113]
  [114 115]
  [116 117]
  [118 119]]]

请提供一个数字示例,其中较早的形状可能是
(3,20,2)