# NumPy

# 应用场景

Python中的list容器可存储任何对象,不适合数值运算。其array模块虽然保证了其内数据的类型,但是只支持一维数组,不支持多维数组,也没有相应的数值运算函数,NumPy的出现弥补了Python的这些不足,下面来了解下它的基本操作。

# 生成各种数组

import numpy as np
# 创建一维数组
np1 = np.array(range(10))
# 生成10长度的一维数组,元素均为0
np2 = np.zeros(10,dtype=int)
# 生成5*5二维数组,元素均为0
np3= np.zeros((5,5),dtype=int)
# 生成5*5二维数组,元素均为1
np4=np.ones((5,5),dtype=int)
# 生成5*5二维数组,元素均为3.14
np5=np.full((5,5),3.14)
# 生成5*5二维数组,元素均为9.9,都为单精度浮点型
np10= np.full((3,3),9.9,dtype=float)
# 将np5中的元素都填充为1
np6=np.ones_like(np5)
# 生成5*5随机二维数组
np7=np.random.random((5,5))
# 生成一组序列
list(range(2,12,2)) #(开始,结束,间隔)
np8=np.linspace(1,11,10) #(开始,结束,间隔元素个数)
# 生成单位矩阵
np9=np.eye(5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 变形生成数组

import numpy as np
arr1 = np.arange(0,24,3)
print(arr1)
print(arr1.reshape(2,4))

arr2=np.linspace(0, 4, 9)
arr2.resize(3,3)
print(arr2)
1
2
3
4
5
6
7
8

# 访问数组中的元素

# 访问数组中元素
np11= np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
# [row,col]选取元素
print(np11[2,3])
print(np11[:2,:3])
print(np11[:2][:3])
1
2
3
4
5
6

# 获取数组的属性

# 获取维度
print(np11.ndim)
# 获取长宽
print(np11.shape)
# 查看元素个数
print(np11.size)
# 查看元素类型
print(np11.dtype)
# 查看元素所占字节大小
print(np11.itemsize)
# 查看所有元素一共占字节大小
print(np11.nbytes)
1
2
3
4
5
6
7
8
9
10
11
12

# 数组基本操作

import numpy as np
arr = np.array(range(10))
print(arr+5)
print(arr-2)
print(arr*10)
arr2 = np.full((3,3),6.6)
print(arr2+5)
# 自身数组减去目标值。
print(np.subtract(arr2,2))
print(np.sin(np.linspace(0,90*np.pi/180,5)))
1
2
3
4
5
6
7
8
9
10

# 求和运算

import numpy as np
arr3 = np.array([[1,2],[3,4]])
print(sum(arr3))
print(np.sum(arr3))
# 比较下效率
arr4 = np.random.rand(1000)
%timeit sum(arr4)
%timeit np.sum(arr4)
1
2
3
4
5
6
7
8

从上面可以看出np.sum的效率要远高于sum的效率。

# 比较大小

import numpy as np
arr = np.array(range(10))
print(arr > 3)
print(arr == 5)
# 判断全都大于-1
np.all(arr>-1)
# 判断全都大于3
np.all(arr>3)
# 判断有任何元素都大于3
np.any(arr>3)
1
2
3
4
5
6
7
8
9
10

# 排序

import numpy as np
sortArr=np.random.rand(3,3)
print(sortArr)
# 默认按横向排序
sortArr.sort(axis=-1)
print(sortArr)
1
2
3
4
5
6

# 拼接

import numpy as np
b = np.array([[1,2,3],[4,5,6]])
# 横向拼接
print(np.concatenate((b,b,b),axis=-1))
# 纵向拼接
print(np.concatenate((b,b,b),axis=0))
1
2
3
4
5
6