numpy数组的基本操作方法
索引
首先我们导入numpy,import numpy as np
。
numpy支持隐式索引
如x = np.array([0,1,2,3,4,5,6,7,8,9])
,那么我们可以使用x[0]
来获取向量x的第一个元素0
;
如y = np.arange(15).reshape((3,5))
,那么我们可以使用y[0,0]
来获取矩阵x的第一行第一列的元素0
;
若x[-1]
,则表示获取向量x的最后一个元素。
切片
核心要点:X[start:stop:step]
获取一维子数组
由x = array([0,1,2,3,4,5,6,7,8,9])
,则x[:5]
表示获取向量x的前5个元素组成的子数组array([0,1,2,3,4])
;
获取多维子数组
由y = array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])
,则y[:2,:2]
表示获取矩阵y的前2行的前2列元素组成的子数组array([[0,1],[5,6]])
;
获取数组的行或列
由y[:,0]
表示获取矩阵y的第一列,由y[0,:]
表示获取矩阵y的第一行;
获取非副本视图的子数组
由z = y[:2,:2]
,则令z[0,0] = 100
,那么可以得到z与y的第一行第一列元素都变成了100,在这里可以将z视为y的一个引用;
创建数组的副本
由z = y[:2,:2].copy()
,则令z[0,0] = 100
,那么z的第一行第一列元素为100,y的第一行第一列元素仍然为0。
合并操作
合并向量
x = np.array([1,2,3])
y = np.array([3,2,1])
由np.concatenate([x,y])
,那么可以得到array([1,2,3,3,2,1])
合并矩阵
A = np.array([[1,2,3],
[3,2,1]])
由np.concatenate([A,A])
,那么可以得到
array([[1,2,3],
[3,2,1],
[1,2,3],
[3,2,1]])
可以通过在np.concatenate()
内添加axis = 0
或axis = 1
来从不同维度进行合并操作。
垂直方向进行合并操作
由z = np.array([4,5,6])
,那么np.vstack([A,z])
可以得到
array([[1,2,3],
[3,2,1],
[4,5,6]])
水平方向进行合并操作
由
b = np.full((2,2),666)
np.hstack([A,b])
那么可以得到
array([[1,2,3,666,666],
[3,2,1,666,666]])
垂直与水平方向同时进行合并操作
np.tile([x],(2,1))
由此可以得到
array([[1,2,3,1,2,3],
[1,2,3,1,2,3]])
分割操作
分割向量
由np.split(x,[2])
,那么可以得到
arr1 = array([1,2])
arr2 = array([3])
分割矩阵
由array = np.split(A,[1])
,那么可以得到
arr1 = array([1,2,3])
arr2 = array([3,2,1])
可以通过在np.split()
内添加axis = 0
或axis = 1
来从不同维度进行分割操作。
垂直方向进行分割操作
由np.vsplit(A,[1])
,那么可以得到
arr1 = array([1,2,3])
arr2 = array([3,2,1])
水平方向进行分割操作
由np.hsplit(A,[2])
,那么可以得到
arr1 = array([[1,2],
[3,2]])
arr2 = array([[3],
[1]])