一、Numpy基本知识
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 。下面我们一起来了解numpy的使用叭~
1. 基本操作
(1)ndarray格式的数据可以直接±,表示对里面每个元素执行该操作,而list不可以:
array1 = np.array([1,2,3,4,5])
array1 = array1 + 1
(2)查看ndarray的shape大小,直接调用.shape方法,而list不可以:
array2 = np.array([[1,2,3],
[4,5,6]])
array2.shape
(3)查看每个元素占几个字节(ndarray里面每个元素一定是相同类型的。不同也会自动向下转为相同类型):
array2.itemsize
(4)查看ndarray中的元素类型:
array2.dtype
(5)查看ndarray中有多少个元素:
array2.size
(6)查看ndarray的维度数:
array2.ndim
(7)将每个元素都赋值为0:
array4.fill(0)
2. 索引与切片
(1)取ndarray第一个元素(第0个):
array = np.array([1,2,3,4,5])
array[0]
(2)取出第1,2个元素
array[1:3]
区间是左闭右开!!!!
(3)从倒数第二个到最后一个
array[-2:]
(4)对高维ndarray进行修改
array0 = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
array0[1,1] = 10
array0
可以观察到第一行第一列的元素的值已经被修改👇
(5)取出第一行全部元素
array0[1]
(6)取出第一列所有元素
array0[:,1]
注:‘ :’表示每一行都保留
(7) 将原ndarray更改后的结果保存于其他ndarray,原变量的元素不变
错误:
array_new = array0
array_new[1,1]=100
正确:
array_newer = array_new.copy()
array_newer[1,1] = 999
由于(4)中赋值修改会使得原array直接被更改,即赋值就代表前后指向相同的内存,修改A同时B也被修改
(8) bool索引
df = np.arange(0,100,10)
mask = np.array([0,0,0,4,1,1,0,0,9,0],dtype=bool)
df[mask]
这里mask是有True和False组成的bool类型的ndarray,以此为例,形式如下👇
array([False, False, False, True, True, True, False, False, True,
False])
将其作为df的bool索引,可以进行数据的筛选,帅选结果为30,40,50,80
(9)产生10个0~1的随机数,筛选大于0.5的所有元素
random_array = np.random.rand(10)
bool_array = random_array > 0.5
random_array[bool_array]
其实也是利用了bool索引来对数据进行筛选。也可以👇来获得bool索引位True所对应原ndarray的真实索引
np.where(random_array > 0.5)