簡體   English   中英

將給定二維數組中的列遞歸轉置到新二維數組的行

[英]Recursively transposing columns from a given 2D-array to the rows of a new 2D-array

既然我來了,還不如得到我能得到的一切幫助。 注意: I believe this is different from other problems involving transposing with arrays.

就像在我的第一篇文章中一樣,我一直在研究 Python 中的遞歸,並一直試圖通過循環等使用通常簡單的解決方案來解決問題,而是使用遞歸算法來解決它們。

對於這個特殊的問題,給定一個以 NxN 網格格式化的 2D 數組,我想從該網格中取出每一列並將它們轉換為新網格的行。

例如,假設我傳入一個網格: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

我的程序應該將列[1, 5, 9, 13]設為新二維數組的行; 下面是一個可視化:

[[1, 2, 3, 4],           [[1, 5, 9, 13], 
 [5, 6, 7, 8],     ---->  [2, 6, 10, 14], 
 [9, 10, 11, 12],  ---->  [3, 7, 11, 15], 
 [13, 14, 15, 16]]        [4, 8, 12, 16]]

接下來是我嘗試使用幫助程序 function 提取每一列,並使用幫助程序創建需要傳遞給它的n值:

def get_column(array, n):

    base_val = array[0][n]

    if len(array) == 1:
        return [base_val]
    else:
        return [base_val] + get_column(array[1:], n)

def integer(grid):
    return len(grid)

def transpose(grid, n = integer(grid), new_grid = []):

    if n < len(grid):
        new_grid.append(get_column(grid, n))
        n += 1
        return transpose(grid, n, new_grid)
    else:
        return new_grid

在我的main() function 中,來自外部的唯一調用是對transpose() function 的調用,它僅通過網格作為參數。

在 python 中,list 實際上被構造為一個動態數組。 這意味着您需要 O(n) 時間來訪問 n 元素。 因此,使用列表選擇方法進行轉置不會達到矢量化效果。

NumPy 的 transpose() 方法如何置換數組的軸?

已經解釋了numpy.transpose為優化轉置操作所做的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM