[英]How can I slice 2D array in python without Numpy module?
我想知道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.