2 回答

TA貢獻1794條經驗 獲得超8個贊
您需要重塑和轉置數組:
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']]
然后將其重塑為“兩個 3x3 矩陣”:
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. 您需要對軸重新排序,以便在x3go之后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']

TA貢獻1877條經驗 獲得超1個贊
如果x,y和z值的長度相同,則可以使用以下方法np.array_split將結果展平.ravel():
np.array(np.array_split(a, 3, axis=1)).ravel()
array(['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'y1', 'y2', 'y3', 'y4', 'y5',
'y6', 'z1', 'z2', 'z3', 'z4', 'z5', 'z6'], dtype='<U2')
添加回答
舉報