numpy 的优势
当数据量达到一定级别后,numpy 的计算会比原生 Python 块。numpy 是专门处理高维苏剧计算的包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import random import time import numpy as np
a = [] for i in range(10000000000): a.append(random.random()) t1 = time.time() sum1 = sum(a) t2 = time.time()
b = np.array(a) t3 = time.time() sum2 = np.sum(b) t4 = time.time()
print(t2 - t1, t4 - t3)
|
特点:同类型的数据
1 2 3 4 5 6 7
| import numpy as np
arr1 = np.array([3, 2,1.5,9]) print(arr1)
[3. 2. 1.5 9. ]
|
numpy 的安装
numpy 的使用
一维数组
直接传入列表的方式
1 2
| arr1 = np.array([3, 2, 1.5, 9]) print(arr1, type(arr1))
|
传入 range 生成序列
1 2
| b = np.array(range(10)) print(b, type(b))
|
使用 numpy 自带的 np.arange() 函数生成数组
1 2
| arr2 = np.arange(0,10,2) print(arr2, type(arr2))
|
使用 np.linspace() 生成数组
返回在间隔[开始,结束]上计算的 num 个均匀间隔样本
1 2
| arr3 = np.linspace(2.0, 3.0, num=5, retstep=True) print(arr3, type(arr3))
|
二维数组
直接传入列表的方式
1 2 3 4 5 6 7
| lst = [[1,2], [3,4], [5,6], [7,8,] arr5 =np.array(lst) print(arr5, type(arr5))
t = [(1,2), (3,4), (5,6), (7,8)] arr6 = np.array(t) print(arr6, type(arr6))
|
全 0 数组
全 1 数组
空数组
基本属性
1 2 3 4 5 6 7 8
| arr = np.array([1, 2, 3, 4, 5, 6, 7]) print(arr.shape) print(arr.dtype) print(arr.size) print(arr.ndim) print(arr.itemsize) print(arr.nbytes) print(arr.T)
|
数据类型转换
1 2 3
| arr = np.array([6.8, 9.9, -5, 1, 3.3, 11.11]) arr2 = arr.astype(np.int32) print(arr2, arr2.dtype)
|
创建数组时指定元素类型
1 2
| arr3 = np.arange(10, dtype=np.float) print(arr3, arr3.dtype)
|
索引和切片
索引
一维数组
1 2
| ar =np.arange(5, 20) print(ar)
|
取出数组中的 10
取 7~10
取数组中所有的偶数
1 2
| print(ar[ar%2==0]) print(ar[1::2])
|
二维数组
1 2
| ar2 = np.arange(16).reshape(4,4) print(ar2)
|
取二维数组中 ar2 中的第 1 行
取二维数组中 ar2 中的元素为 2
1 2
| print(ar2[0][2]) print(ar2[0,2])
|
取二维数组中 ar2 中的前3行
二维数组中 ar2 中的 5,6,9,10
三维数组
1 2 3
| arr3d = np.array([[[1,2,3],[4,5,6]],[7,8,9],[[1,1,1],[5,5,5],[9,9,9]]]) print(arr3d.shape)
|
取三维数组中 arr3d 中的元素 5
布尔索引
1 2 3 4 5 6 7 8 9 10 11
| freinds = (['Jone', 'Jack', 'Rose', 'Lily', 'Tom']) data = np.random.randn(5, 4) print(data)
print(freinds=='Jack') print(data[freinds=='Jack'])
print(data[freinds=='Jack', 2])
print(data[~(freinds=='Jack')])
|
1 2 3 4 5 6
| heights = np.array([1.73, 1.68, 1.71, 1.89, 1.79]) weights = np.array([65.4, 59.2, 63.6, 88.4, 68.7])
bmi = weights/heights**2 print(bmi)
|
作业
1.反转一个向量(第一个元素变为最后一个)
1 2 3
| arr = np.arange(10) print(arr) print(arr[::-1])
|
2.创建一个 10 x 10 的矩阵,并找到它的最大值和最小值
1 2 3 4
| arr = np.random.randn(10, 10) print(arr) print(arr.min()) print(arr.max())
|
3.创建一个二位数组,其中边界值为1,其余值为0
1 2 3
| arr = np.ones((10, 10)) arr[1:-1, 1:-1] = 0 print(arr)
|
4.创建一个5x5的矩阵,其中值从-5到5
1 2
| arr = np.arange(-5, 5, 0.1) print(arr)
|