今天想在项目中使用二维数组遇到一些坑,做一个小结为以后避坑,主要是二维数组的生成和切片部分。
(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]]