Вам необходимо изменить форму и транспонировать массив:
import numpy as np
a = np.array([['x1','x2','x3','y1','y2','y3','z1','z2','z3'],
['x4','x5','x6','y4','y5','y6','z4','z5','z6']])
b = a.reshape(2, 3, 3).transpose((1, 0, 2)).ravel()
print(b)
# ['x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'y1' 'y2' 'y3' 'y4' 'y5' 'y6' 'z1' 'z2'
# 'z3' 'z4' 'z5' 'z6']
Шаг за шагом, сначала у вас есть исходный массив.
print(a)
# [['x1' 'x2' 'x3' 'y1' 'y2' 'y3' 'z1' 'z2' 'z3']
# ['x4' 'x5' 'x6' 'y4' 'y5' 'y6' 'z4' 'z5' 'z6']]
Затем вы изменяете его как «две матрицы 3х3»:
print(a.reshape(2, 3, 3))
# [[['x1' 'x2' 'x3']
# ['y1' 'y2' 'y3']
# ['z1' 'z2' 'z3']]
#
# [['x4' 'x5' 'x6']
# ['y4' 'y5' 'y6']
# ['z4' 'z5' 'z6']]]
Теперь, если вы сгладите это, после x3
вы получите y1
.Вам нужно изменить порядок осей, чтобы после x3
перешло x4
, что означает, что вы сначала хотите перебрать столбцы (x1
, x2
, x3
), а затем перейти к следующей матрице, чтобы перебрать столбцы вего первые строки (x4
, x5
, x6
) и затем переход к следующей строке первой матрицы.Таким образом, самые внутренние измерения должны быть одинаковыми (столбцы), но вы должны поменять местами первые два измерения, чтобы сначала изменить матрицу, а затем строки, а не наоборот:
print(a.reshape(2, 3, 3).transpose((1, 0, 2)))
# [[['x1' 'x2' 'x3']
# ['x4' 'x5' 'x6']]
#
# [['y1' 'y2' 'y3']
# ['y4' 'y5' 'y6']]
#
# [['z1' 'z2' 'z3']
# ['z4' 'z5' 'z6']]]
Теперь, чем может бытьсплющенный, чтобы получить желаемый результат.
print(a.reshape(2, 3, 3).transpose((1, 0, 2)).ravel())
# ['x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'y1' 'y2' 'y3' 'y4' 'y5' 'y6' 'z1' 'z2'
# 'z3' 'z4' 'z5' 'z6']