一、创建数组
(一) Ndarray 对象及其创建
1、创建Numpy数组
1 2 3 4 5
| a = np.array([1,2,3,4,5,6])
A = np.array([[1,2,3], [4,5,6]])
|
2、Numpy数组的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| a.ndim A.ndim
a.shape A.shape
a.size A.size
a.dtype A.dtype
|
3、创建数组的便捷函数
ones 创建全是1.
的数组
1 2 3 4 5 6
| np.ones(4) np.ones(4).dtype np.ones(4, dtype='int64') np.ones(shape=(2,4)) np.ones_like(A)
|
zeros 创建全为0.
的数组
1 2 3 4
| np.zeros(4) np.zeros((2,4)) np.zeros_like(A)
|
full 创建指定数值的数组
1 2 3
| np.full(8,666) np.full((2,4),666) np.full(A,666)
|
empty 创建数组并初始化元素值
1 2 3
| np.empty(8) np.empty((2,4)) np.empty_like(A)
|
4、创建等差数组
arange 创建等差数组
1 2 3 4
| np.arange(10) np.arange(1,10,2) np.arange(10).reshape(2,5)
|
linspace 创建等差数组
5、数据取整
向上&向下
1 2 3
| np.ceil(X)
np.floor(X)
|
四舍五入取整
1 2 3 4 5 6 7 8 9 10 11 12 13
| a = np.array([1.2347, 0.4214, 42.2374]).astype('float')
a.round(2)
np.round(a, 2)
np.round(X)
|
(二) Numpy 随机数模块
1 2
| X = np.arange(10) np.random.shuffle(X)
|
1、random 模块
1 2 3 4
| np.random.random() np.random.random(5) np.random.random((2,4))
|
2、rand 模块
1 2 3 4 5
| np.random.rand() np.random.rand(5) np.random.rand(2,4) np.random.rand(2,3,4)
|
3、randint 获得随机整数
1 2 3 4
| np.random.randint(5) np.random.randint(5,10) np.random.randint(5,10,size=8) np.random.randint(5,10,size=(2,4))
|
4、seed 设置随机数生成器的种子
为随机数生成器设置了一个固定的种子后,每次生成的随机序列都会是相同的!
1 2 3
| np.random.seed(666) np.random.randint(5,10,size=(2,4))
|
5、randn 标准正态分布
生成标准正态分布(均值为0,标准差为1)的随机数
1 2
| np.random.randn(5) np.random.randn(2,4)
|
6、normal 高斯分布
可设置均值、方差,生成具有高斯分布的随机数
1 2 3
| np.random.normal() np.random.normal(10,1000,20) np.random.normal(10,1000,size=(4,6))
|
生成服从均匀分布的随机数
1 2 3
| np.random.uniform() np.random.uniform(1,5) np.random.uniform(1,5,(3,4))
|
二、数组的基础索引
1 2 3 4 5 6 7 8 9
| import numpy as np a = np.arange(10) A = np.arange(20).reshape(4,5)
|
(一) 一维数组
调用方式同python切片取值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| a
a[0]
a[0:5]
a[:5]
a[4:]
a[-3:]
a[:]
a[::2]
a[::-1]
|
(二) 二维数组
Numpy的二维数组切片得到的数组中的值改变时,原始值也会跟着变,如:
1 2 3
| X = A[:2,:3] X[0,0] = 666 A[0,0] = 222
|
使用.copy()方法将二维数组赋值给新数组,新数组变化不影响原数组,如:
以下为二维数组常见调用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
A[0,0]
A[0,:]
A[0]
A[-1]
A[:,0]
A[:,-1]
A[:2,:4]
A[::-1,::-1]
|
三、数组的合并拆分
(一) 数组的合并
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np
a = np.array([6,6,6,6]) X = np.arange(12).reshape(3,4)
B = np.full((3,2),666)
|
1、垂直方向(行操作)
方法1:concatenate函数
1 2 3 4 5
| A = np.concatenate((X,a.reshape(1,4)),axis=0)
|
方法2:vstack函数
2、水平方向(列操作)
方法1:concatenate函数
1 2 3 4
| np.concatenate((X,B),axis=1)
|
方法2:hstack函数
(二) 数组的拆分
split函数中拆分部分按 数组[ ] 来分
数组[ ] 中包含几个值,将会按照从0开始,以每个值做开区间来进行划分,具体代码如下
1、按行拆分
方法1:split函数
1 2 3 4 5 6
| X1,X2 = np.split(X,[-1],axis=0)
|
方法2:vsplit函数
1 2 3 4 5 6
| X1,X2 = np.vsplit(X,[2])
np.vsplit(X,[1,2])
|
2、按列拆分
方法1:split函数
1 2 3 4 5 6 7 8 9
| X1,X2 = np.split(X,[-1],axis=1)
|
方法2:hsplit函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| X1,X2 = np.hsplit(X,[-1])
np.hsplit(X,[1,2,-1])
|
四、Numpy矩阵运算
对比 Python 将数组乘2
1 2
| A = [i for i in range(5)] y = [i*2 for i in A]
|
举例:Numpy 将数组乘2
1 2 3
| import numpy as np A = np.arange(5) Y = A * 2
|
(一) 一元运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| X = np.arange(1,11,0.5).reshape(4,5)
np.abs(X)
np.sqrt(X)
np.square(X)
np.exp(X)
np.log(X)
np.log2(X)
np.sin(X) np.cos(X) np.tan(X)
|
(二) 二元运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| X = np.arange(1,11,0.5).reshape(4,5)
X + 1 np.add(X,1)
X - 1
X * 2
X / 2
2 / X
X // 2
X % 2
X ** 3
|
(三) 矩阵运算
1 2 3 4 5 6 7
| X = np.linspace(10,40,4).reshape(2,2)
Y = np.linspace(1,4,4).reshape(2,2)
|
矩阵常用运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| X + Y
X - Y
X * Y
X.dot(Y)
X / Y
X.T
np.transpose(X)
np.linalg.inv(X)
np.linalg.det(X)
np.linalg.eig(X)
|
五、Numpy统计运算
统计最值
1 2 3 4 5 6 7 8 9 10 11
| import numpy as np
X = np.arange(5000000) np.min(X) np.max(X)
Y = X.reshape(5,-1) np.min(Y,axis=0) np.min(Y,axis=1)
|
计算其他数值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| X = np.linspace(1,20,20).reshape(4,5)
np.sum(X)
np.sum(X,axis=0)
np.sum(X,axis=1)
np.mean(X)
np.median(X)
np.std(X)
np.var(X)
np.ptp(X)
np.percentile(X, 90) q = np.linspace(0,100,5) np.percentile(X,q)
np.cumsum(X,axis=0) np.cumsum(X,axis=1)
np.diff(X,axis=0) np.diff(X,axis=1)
np.prod(X,axis=0) np.prod(X,axis=1)
|
六、arg运算和排序
1、arg运算
arg主要用来提取索引值
1 2 3 4 5 6 7 8
| import numpy as np X = np.random.normal(0,1,size=1000000) np.min(X) np.argmin(X) X[np.argmin(X)]
np.max(X) np.argmax(X)
|
2、排序
先使用np.random.shuffle(X)打乱原数组的顺序,再进行排序
1 2 3 4 5 6 7 8 9
| X = np.arange(10) np.random.shuffle(X)
np.sort(X)
X.sort()
X[::-1]
|
3、arg应用
1 2 3 4
| X = np.arange(10) np.random.shuffle(X)
np.argsort(X)
|
3、partition分区
1 2 3 4 5 6
| X = np.arange(10) np.random.shuffle(X)
np.partition(X,5)
np.argpartition(X,5)
|
4、高维数组排序
1 2 3 4 5 6
| X = np.random.randint(10,size=(5,5)) np.sort(X)
np.argsort(X,axis=1)
np.argsort(X,axis=1)
|
七、神奇索引和布尔索引
1 2 3 4 5 6 7 8 9 10 11 12 13
| import numpy as np
X = np.arange(10)
index = [2,5,8] X[index]
X[2:8]
X[2:8:2]
index = np.array([[1,3,5],[2,4,6]]) X[index]
|
1、神奇索引
1 2 3 4 5 6 7 8 9 10 11
| X = np.arange(10) X = X.reshape(2,-1) row = np.array([0,1,0]) col = np.array([0,2,4])
X[row,col]
X[0,col]
X[row,:2]
|
2、布尔索引
1 2 3 4 5
| X = np.arange(10) X = X.reshape(2,-1)
col = [True, False, True, False, True] X[0,col]
|
比较用法
1 2 3 4 5 6 7 8 9 10 11
| X = np.arange(10)
X < 5
X >= 2
X == 3
X != 3
X * X == 9
|
比较用法应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| X = np.arange(10)
X[X > 3]
X[X % 2]
np.count_nonzero(X < 5)
np.sum(X < 5)
np.any(X < 0) np.any(X > 5)
np.all(X > 0) np.all(X < 10)
X = X.reshape(2,-1)
np.sum(X % 2 == 0)
np.sum(X % 2 == 0, axis=1) np.sum(X % 2 == 0, axis=0)
np.all(X > 2, axis=0)
|
八、与& 或| 非~
1 2 3 4
| X = np.arange(10)
np.sum((X<5) & (X>1)) np.sum(~(X==0))
|