通过在 Python 中切割一个更大的数组来获得小数组

Obtains small array by cuting a bigger one in Python

我今天在处理数组。我正在尝试对一个看起来像这样的大数组进行切片:

A = [[a(0;0), a(0;1), ..., a(0;n)],
     [a(1;0), a(1;1), ..., a(1;n)],
     [.....,  ....., ....., .....],
     [a(m;0), ...., ....., a(m;n)],
     [b(m+1;0), b(m+1,1), ..., b(m+1,n)],
     [b(m+2;0), b(m+2,1), ..., b(m+2,n)],
     [.....,  ....., ....., .....],
     [b(m+y;0), b(m+y,1), ..., b(m+y,n)],
     [c(m+y+1;0), c(m+y+1,1), ..., c(m+y+1,n)],
     [c(m+y+2;0), c(m+y+2,1), ..., c(m+y+2,n)],
     [.....,  ....., ....., .....],
     [c(m+2y;0), c(m+2y,1), ..., c(m+2y,n)]]

如您所见,我的 A 数组中有 3 个数组。我试图将它们放在单独的数组中以在最后获得:

A_0 =[[a(0;0), a(0;1), ..., a(0;n)],
     [a(1;0), a(1;1), ..., a(1;n)],
     [.....,  ....., ....., .....],
     [a(m;0), ...., ....., a(m;n)]]

B =  [[b(m+1;0), b(m+1,1), ..., b(m+1,n)],
     [b(m+2;0), b(m+2,1), ..., b(m+2,n)],
     [.....,  ....., ....., .....],
     [b(m+y;0), b(m+y,1), ..., b(m+y,n)]]

C =  [[c(m+y+1;0), c(m+y+1,1), ..., c(m+y+1,n)],
     [c(m+y+2;0), c(m+y+2,1), ..., c(m+y+2,n)],
     [.....,  ....., ....., .....],
     [c(m+2y;0), c(m+2y,1), ..., c(m+2y,n)]]

关键是我正在寻找一种方法,该方法可用于 x 个较小的数组以隔离较大的数组。 我希望我的问题很清楚,我期待着一些帮助。 感谢大家!

如果您的数据是偶数,则只需将其分块:

data = A
m = <your offset>
[data[idx: idx + m] for idx in range(0, len(data), m)]

# example:
data = [["a1"],["a2"],["b1"],["b2"],["c1"],["c2"]]
m = 2
print([data[idx: idx + m] for idx in range(0, len(data), m)])
[
    [['a1'], ['a2']],
    [['b1'], ['b2']],
    [['c1'], ['c2']]
]

如果需要,则将其拆分为变量(或使用字典):

A_0, B, C = [data[idx: idx + m] for idx in range(0, len(data), m)]

如果数据不均匀,您需要找到数据之间的 borders/edges 并执行以下操作:

out = []
tmp = []
for idx, item in enumerate(big_array):
    tmp.append(item)
    # last row of current item or first row of the next one
    if item[-1] == something or big_array[idx + 1][0] == something:
        out.append(tmp)

你试过numpy.array_split了吗?我认为这就是您在这里可能需要的。从您提供的示例数组来看,a、b 和 c 似乎在主数组 A 中以 m 的倍数出现。因此,如果您将主数组 A 拆分为 m 个索引,那么它会 return 您所期望的。

这可能类似于:

import numpy as np

...
...


A_0, B, C, *_ = np.array_split(A, m)