簡體   English   中英

如何在沒有 Numpy 模塊的情況下在 python 中切片二維數組?

[英]How can I slice 2D array in python without Numpy module?

  1. 我想要處理的是部分沒有 numpy 模塊的切片二維數組,如下面的 numpy 示例。
  2. 我想知道python基本函數中切片列表的時間復雜度

    import numpy as np A = np.array([ [1,2,3,4,5,6,7,8] for i in range(8)]) n = len(A[0]) x = int(n/2) TEMP = [[None]*2 for i in range(2)] for w in range(2): for q in range(2): TEMP[w][q] = A[w*x:w*x+x,q*x:q*x+x] for w in range(2): for q in range(2): print(TEMP[w][q])

這是我想要的結果

[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]
[[5 6 7 8]
 [5 6 7 8]
 [5 6 7 8]
 [5 6 7 8]]
[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]
[[5 6 7 8]
 [5 6 7 8]
 [5 6 7 8]
 [5 6 7 8]]

Process finished with exit code 0

對於第一個問題:

A = [ [1,2,3,4,5,6,7,8] for i in range(8)]
n = len(A[0])
x = int(n/2)

TEMP = [[None]*2 for i in range(2)]

for w in range(2):
    for q in range(2):
        TEMP[w][q] = [item[q * x:(q * x) + x] for item in A[w * x:(w * x) + x]]

for w in range(2):
    for q in range(2):
        print("{i}, {j}: {item}".format(i=w, j=q, item=repr(TEMP[w][q])))

Numpy 使二維數組的垂直切片更容易。 但是,沒有它,您也可以獲得相同的結果。 想象一下,如果我們有以下二維列表:

arr1=[[1,1,1,0,0,0],[0,1,0,0,0,0],[1,1,1,0,0,0],[0,0, 2,4,4,0],[0,0,0,2,0,0],[0,0,1,2,4,0]]

它表示為以下矩陣:

[[1, 1, 1, 0, 0, 0],
 [0, 1, 0, 0, 0, 0],
 [1, 1, 1, 0, 0, 0],
 [0, 0, 2, 4, 4, 0],
 [0, 0, 0, 2, 0, 0],
 [0, 0, 1, 2, 4, 0]]

假設您想將其切片以形成以下圖案:

在此處輸入圖片說明

這可以通過以下方式在沒有 numpy 的情況下實現:

for x in range (0,4):
        for y in range (0,4):
            # Here we traverse through the 2D array vertically
            temp_matrix= arr1[x][y:y+3],arr1[x+1][y:y+3],arr1[x+2][y:y+3]
             print (temp_matrix) 

如果我們改用 numpy,我們可以重寫以下代碼:

arr=np.array(arr1)
rows = arr.shape[0]
cols = arr.shape[1]
for x in range (0,rows-2):
    for y in range (0, cols-2):
        print(arr[x:x+3,y:y+3])

暫無
暫無

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

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