通过在 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)
我今天在处理数组。我正在尝试对一个看起来像这样的大数组进行切片:
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)