今天想在項目中使用二維數組遇到一些坑,做一個小結為以后避坑,主要是二維數組的生成和切片部分。
(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]]
