python的二維數組的切片避坑小結


今天想在項目中使用二維數組遇到一些坑,做一個小結為以后避坑,主要是二維數組的生成和切片部分。

(1)二維數組的切片

二維數組有list和np.array 兩種數據格式,但是它們的切片方式是完全不同的。

import pandas as pd
import numpy as np
list = [[1,2,3],[4,5,6],[7,8,9]]
list_nparr = np.array(list)
list
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list_nparr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

1.二維np.array的切片

list_nparr[0:2,0:2]  # 按行列切片,中間用逗號隔開
array([[1, 2],
       [4, 5]])

2.二維list的切片

  • 只能每次只取一行切片,再循環
[list[i][0:2] for i in range(0,3)]
[[1, 2], [4, 5], [7, 8]]

(2)數組的生成

  • 數組的復制 是對引用的復制
m=3
n=3
l= [[0]*m]*n
l
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
l[0][0]=3
l
[[3, 0, 0], [3, 0, 0], [3, 0, 0]]

可以看到[0]*3 實際上是對[0]進行了三次相同的引用。 改變其中一個引用,則3個都會發生改變。
所以為避免上述情況,一般用列表生成式去生成二維數組。

a = [[i for i in range(1,10)] for j in range(1,3)]
a
[[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9]]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM