手把手教你使用Python實現(xiàn)多層級數(shù)組矩陣變換
在處理數(shù)據(jù)分析或算法開發(fā)時,我們經(jīng)常會遇到復(fù)雜的數(shù)組重組需求。今天,將通過一個具體的案例,解析如何將一個簡單的一維數(shù)組,按照特定的數(shù)學(xué)邏輯轉(zhuǎn)換成帶分隔符的復(fù)雜矩陣。
任務(wù)目標(biāo)
根據(jù)下面要求:

第一層: 每 3 個數(shù)字分為一組。
第二層: 每個大組 {a,b,c}\{a, b, c\}{a,b,c} 變形為 3×23 \times 23×2 的子矩陣。
第三層: 縱向堆疊所有矩陣,并在組間插入全 000 間隔行(末尾除外)
代碼實現(xiàn)
使用 Python 基礎(chǔ)語法來實現(xiàn)這一邏輯。這段代碼清晰地展示了如何通過循環(huán)和條件判斷來精準(zhǔn)控制數(shù)據(jù)結(jié)構(gòu)。
def transform_array(arr):
# 1. 第一層分組:從左到右,每 3 個數(shù)字為 1 個大組
groups = [arr[i:i+3] for i in range(0, len(arr), 3)]
final_result = []
for idx, group in enumerate(groups):
# 提取大組內(nèi)的三個元素 a, b, c
a, b, c = group
# 2. 第二層變形:生成 3 行 2 列子矩陣
# 結(jié)構(gòu)為:[a, a+b], [b, b+c], [c, c+a]
sub_matrix = [
[a, a + b],
[b, b + c],
[c, c + a]
]
# 3. 第三層拼接:將子矩陣縱向堆疊
final_result.extend(sub_matrix)
# 額外規(guī)則:每拼接完一個大組,插入 1 行全 0 分隔行
# 注意:最后一個大組拼接完成后,末尾不需要加分隔行
if idx < len(groups) - 1:
final_result.append([0, 0])
return final_result
# 測試數(shù)據(jù)
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
result = transform_array(arr)
# 打印結(jié)果
for row in result:
print(row)
代碼深度解析
1. 靈活的分組切片
代碼第一步使用了列表推導(dǎo)式配合 range(0, len(arr), 3)。這是 Python 處理分塊任務(wù)的標(biāo)準(zhǔn)姿勢,既簡潔又高效。
2. 矩陣構(gòu)造邏輯
在第二層變形中,我們直接利用 Python 列表的解構(gòu)賦值 a, b, c = group。這使得后續(xù)計算 a+ba+ba+b 或 b+cb+cb+c 的邏輯與 image_87af13.png 中的數(shù)學(xué)公式完全對應(yīng),極大提高了代碼的可讀性。
3. 智能分隔符插入
最精妙的地方在于 if idx < len(groups) - 1 的判斷。通過索引檢查,我們確保了全 000 行只出現(xiàn)在大組之間,而不會畫蛇添足地出現(xiàn)在整個矩陣的末尾。
運行結(jié)果展示
執(zhí)行上述代碼后,你將得到一個規(guī)整的矩陣結(jié)構(gòu),每組計算結(jié)果清晰可見,且被 000 完美分隔:
[1, 3]
[2, 5]
[3, 4]
[0, 0] <-- 組間分隔
[4, 9]
...
這種處理方式不僅適用于本案例,在處理傳感器數(shù)據(jù)流或生成報表結(jié)構(gòu)時也非常實用。
知識擴展
“多層級數(shù)組矩陣”通常指多維嵌套列表(如列表的列表,類似矩陣)或更一般的高維數(shù)組。在 Python 中,處理這類數(shù)據(jù)有兩種方式:
- 純 Python:使用列表推導(dǎo)、循環(huán)等,適合小規(guī)模或教學(xué)場景。
- NumPy:提供高效的數(shù)組對象,支持多維數(shù)組的快速變換,適合科學(xué)計算。
下面將分別介紹常見變換操作的實現(xiàn)。
1.純 Python 實現(xiàn)常見矩陣變換
假設(shè)我們有一個二維矩陣(列表的列表):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]1. 轉(zhuǎn)置(行列互換)
def transpose(matrix):
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
print(transpose(matrix))
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]2. 順時針旋轉(zhuǎn) 90 度
def rotate_90(matrix):
return [list(row) for row in zip(*matrix[::-1])] # 先上下翻轉(zhuǎn),再轉(zhuǎn)置3. 逆時針旋轉(zhuǎn) 90 度
def rotate_90_counter(matrix):
return [list(row) for row in zip(*matrix)][::-1]4. 水平翻轉(zhuǎn)(左右鏡像)
def flip_horizontal(matrix):
return [row[::-1] for row in matrix]5. 垂直翻轉(zhuǎn)(上下鏡像)
def flip_vertical(matrix):
return matrix[::-1]6. 展平(將多維數(shù)組降為一維)
def flatten(matrix):
return [item for row in matrix for item in row]7. 改變形狀(例如 3x3 → 1x9)
def reshape(matrix, new_rows, new_cols):
flat = flatten(matrix)
if len(flat) != new_rows * new_cols:
raise ValueError("新形狀的元素總數(shù)不匹配")
return [flat[i*new_cols:(i+1)*new_cols] for i in range(new_rows)]2.NumPy 實現(xiàn)高效矩陣變換(推薦)
NumPy 是 Python 科學(xué)計算的基石,其 ndarray 對象天然支持多維數(shù)組和豐富的變換方法。
import numpy as np
# 創(chuàng)建二維數(shù)組
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])1. 轉(zhuǎn)置
arr.T # 或 np.transpose(arr)
2. 旋轉(zhuǎn)
np.rot90(arr, k=1) # 順時針旋轉(zhuǎn) 90 度 (k=1 順時針,k=-1 逆時針)
3. 翻轉(zhuǎn)
np.fliplr(arr) # 水平翻轉(zhuǎn)(左右) np.flipud(arr) # 垂直翻轉(zhuǎn)(上下)
4. 展平
arr.flatten() # 返回新數(shù)組 arr.ravel() # 返回視圖(更高效)
5. 改變形狀(reshape)
arr_1x9 = arr.reshape(1, 9) # 或 arr.reshape(1, -1) arr_3x3 = arr_1x9.reshape(3, 3)
6. 合并多個矩陣
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) np.vstack((a, b)) # 垂直堆疊 np.hstack((a, b)) # 水平堆疊
7. 分割矩陣
# 按列分割成 3 個等寬部分 np.hsplit(arr, 3) # 按行分割成 3 個等高部分 np.vsplit(arr, 3)
多層級(高維)數(shù)組變換
對于三維及以上數(shù)組(如 [層][行][列]),同樣適用上述方法。
# 創(chuàng)建一個 2x3x4 的三維數(shù)組 tensor = np.arange(24).reshape(2, 3, 4) # 轉(zhuǎn)置軸順序:將原來的軸 (0,1,2) 重排為 (2,1,0) tensor.transpose(2, 1, 0) # 交換兩個軸 np.swapaxes(tensor, 0, 2) # 展平到一維 tensor.flatten()
到此這篇關(guān)于手把手教你使用Python實現(xiàn)多層級數(shù)組矩陣變換的文章就介紹到這了,更多相關(guān)Python多層級數(shù)組矩陣變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 動態(tài)生成變量名以及動態(tài)獲取變量的變量名方法
今天小編就為大家分享一篇python 動態(tài)生成變量名以及動態(tài)獲取變量的變量名方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python+OpenCV進(jìn)行不規(guī)則多邊形ROI區(qū)域提取
ROI即感興趣區(qū)域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域,稱為感興趣區(qū)域,ROI。本文將利用Python和OpenCV實現(xiàn)不規(guī)則多邊形ROI區(qū)域提取,需要的可以參考一下2022-03-03
如何基于Django實現(xiàn)上下文章跳轉(zhuǎn)
這篇文章主要介紹了如何基于Django實現(xiàn)上下文章跳轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
python調(diào)用短信貓控件實現(xiàn)發(fā)短信功能實例
這篇文章主要介紹了python調(diào)用短信貓控件實現(xiàn)發(fā)短信功能實例,需要的朋友可以參考下2014-07-07

