导入numpy的包,一般都会定义成np
import numpy
查看numpy的版本
numpy.__version__
'1.20.3'
一般将numpy 定义成np,便于后续的使用
import numpy as np
查看numpy的版本
np.__version__
'1.20.3'
Python List的特点
L = [i for i in range(10)]
L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[5]
5
L[5] = 100
L
[0, 1, 2, 3, 4, 100, 6, 7, 8, 9]
L[5] = "Machine Learning"
L
[0, 1, 2, 3, 4, 'Machine Learning', 6, 7, 8, 9]
array 的特点
import array
arr = array.array('i', [i for i in range(10)])
arr
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[5]
5
arr[5] = 100
arr
array('i', [0, 1, 2, 3, 4, 100, 6, 7, 8, 9])
array也可以像python list一样使用
numpy.array
nparr = np.array([i for i in range(10)])
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr[5]
5
nparr[5] = 100
nparr
array([ 0, 1, 2, 3, 4, 100, 6, 7, 8, 9])
nparr.dtype
dtype('int32')
nparr[5] = 5.0
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr.dtype
dtype('int32')
nparr[3] = 3.19
nparr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr.dtype
dtype('int32')
nparr2 = np.array([1,2,3.0])
nparr2.dtype
dtype('float64')
其他创建numpy.array的方法
创建都是0的向量
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
向量的类型默认是都典型
np.zeros(10).dtype
dtype('float64')
可以在生成的时候定义类型
np.zeros(10,dtype=int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros((3,5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
shape可以定义生成的维度(几行几列)
np.zeros(shape=(3,5), dtype=int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
ones是生成的元素都为1
np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones((3,5))
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
full可以定义生成元素为几
np.full((3,5),66)
array([[66, 66, 66, 66, 66],
[66, 66, 66, 66, 66],
[66, 66, 66, 66, 66]])
np.full(shape=(3,5),fill_value=66)
array([[66, 66, 66, 66, 66],
[66, 66, 66, 66, 66],
[66, 66, 66, 66, 66]])
arange和python中的range类似,但是arange步长可以是小数
# arange
[i for i in range(0, 20, 2)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
np.arange(0,20,2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.arange(0, 1, 0.2)
array([0. , 0.2, 0.4, 0.6, 0.8])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
linspace 截取
np.linspace(0, 20, 10)
# 从0到20截取等长的10个点(包含20)
array([ 0. , 2.22222222, 4.44444444, 6.66666667, 8.88888889,
11.11111111, 13.33333333, 15.55555556, 17.77777778, 20. ])
random 随机生成数,前两个数是范围,后一个数十生成的数量,前闭后开
np.random.randint(0,10)
9
np.random.randint(0,10,10)
array([9, 9, 0, 7, 8, 4, 0, 1, 6, 5])
np.random.randint(4, 8, size=(3,5))
array([[7, 7, 5, 6, 5],
[4, 7, 4, 5, 6],
[6, 6, 5, 7, 4]])
可以定义一个seed,在下一次使用的时候生成一样的
np.random.seed(666)
np.random.randint(4, 8, size=(3,5))
array([[4, 6, 5, 6, 6],
[6, 5, 6, 4, 5],
[7, 6, 7, 4, 7]])
np.random.seed(666)
np.random.randint(4, 8, size=(3,5))
array([[4, 6, 5, 6, 6],
[6, 5, 6, 4, 5],
[7, 6, 7, 4, 7]])
生成10个数
np.random.random(10)
array([0.46284169, 0.23340091, 0.76706421, 0.81995656, 0.39747625,
0.31644109, 0.15551206, 0.73460987, 0.73159555, 0.8578588 ])
生成一个三行五列的数组
np.random.random((3,5))
array([[0.76741234, 0.95323137, 0.29097383, 0.84778197, 0.3497619 ],
[0.92389692, 0.29489453, 0.52438061, 0.94253896, 0.07473949],
[0.27646251, 0.4675855 , 0.31581532, 0.39016259, 0.26832981]])
random.normal生成正态分布上的数
np.random.normal()
0.7760516793129695
np.random.normal(10, 100)
16.102403954600113
np.random.normal(0, 1, (3,5))
array([[ 1.07856138, -0.79783572, 1.1701326 , 0.1121217 , 0.03185388],
[-0.19206285, 0.78611284, -1.69046314, -0.98873907, 0.31398563],
[ 0.39638567, 0.57656584, -0.07019407, 0.91250436, 1.00470497]])
reshape 改变数组的行列
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
X = np.arange(15).reshape(3, 5)
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
基本属性
ndim 维度
x.ndim
1
X.ndim
2
x.shape
(10,)
X.shape
(3, 5)
size 元素个数
x.size
10
X.size
15
numpy.array 的数据访问
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[0]
0
x[-1]
9
X[0][0]
0
X[2,2]
12
x[0:5]
array([0, 1, 2, 3, 4])
x[:5]
array([0, 1, 2, 3, 4])
x[5:]
array([5, 6, 7, 8, 9])
x[::2]
array([0, 2, 4, 6, 8])
x[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
前两行前三列
X[:2,:3]
array([[0, 1, 2],
[5, 6, 7]])
先取前两行
X[:2]
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
再从前两行取前三行,所以结果如下
X[:2][:3]
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
X[:2,::2]
array([[0, 2, 4],
[5, 7, 9]])
X[::-1,::-1]
array([[14, 13, 12, 11, 10],
[ 9, 8, 7, 6, 5],
[ 4, 3, 2, 1, 0]])
X[0]
array([0, 1, 2, 3, 4])
X[0,:]
array([0, 1, 2, 3, 4])
X[0,:].ndim
1
X[0].ndim
1
X[:, 0]
array([ 0, 5, 10])
X[:, 0].ndim
1
subX = X[:2,:3]
subX
array([[0, 1, 2],
[5, 6, 7]])
改变其中的元素
subX[0,0] = 100
subX
array([[100, 1, 2],
[ 5, 6, 7]])
X
array([[100, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[ 10, 11, 12, 13, 14]])
X[0,0] = 0
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
subX
array([[0, 1, 2],
[5, 6, 7]])
subX = X[:2,:3].copy()
subX
array([[0, 1, 2],
[5, 6, 7]])
subX[0,0] = 100
subX
array([[100, 1, 2],
[ 5, 6, 7]])
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
reshape 改变维度
x.shape
(10,)
x.ndim
1
A = x.reshape(2,5)
A
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
B = x.reshape(1,10)
B
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
B.shape
(1, 10)
C = x.reshape(10,-1)
C
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
D = x.reshape(-1,10)
D
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
合并操作
x = np.array([1,2,3])
y = np.array([3,2,1])
np.concatenate([x, y])
array([1, 2, 3, 3, 2, 1])
z = np.array([66,66,66])
np.concatenate([x,y,z])
array([ 1, 2, 3, 3, 2, 1, 66, 66, 66])
A = np.array([[1,2,3],
[4,5,6]])
np.concatenate([A,A])
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
np.concatenate([A,A],axis=1)
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
np.concatenate([A,z.reshape(1,-1)])
array([[ 1, 2, 3],
[ 4, 5, 6],
[66, 66, 66]])
A2 = np.concatenate([A,z.reshape(1,-1)])
A2
array([[ 1, 2, 3],
[ 4, 5, 6],
[66, 66, 66]])
np.vstack([A,z])
array([[ 1, 2, 3],
[ 4, 5, 6],
[66, 66, 66]])
B = np.full((2,2),100)
np.hstack([A,B])
array([[ 1, 2, 3, 100, 100],
[ 4, 5, 6, 100, 100]])
分割操作
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x1,x2,x3 = np.split(x,[3,7])
x1
array([0, 1, 2])
从5分割
x1,x2 = np.split(x,[5])
x1
array([0, 1, 2, 3, 4])
A = np.arange(16).reshape((4,4))
A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
从第2行分割
A1,A2 = np.split(A,[2])
A1
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
从第2列分割
A1,A2 = np.split(A,[2],axis=1)
A1
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]])
upper, lower = np.vsplit(A,[2])
upper
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
left,right = np.hsplit(A,[2])
left
array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]])
data = np.arange(16).reshape((4,4))
举例,在机器学习中可能用到的
data
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
X, y = np.split(data, [-1],axis=1)
X
array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10],
[12, 13, 14]])
y
array([[ 3],
[ 7],
[11],
[15]])