目录
2.1什么是Numpy
NumPy是使用Python进行科学计算的基础软件包。
NumPy 核心技术之一: NdarrayNumPy 最重要的一个特点是其 N 维数组对象 ndarray ,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。
NumPy核心技术之一:切片和索引
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。ndarray 数组可以基于 0~n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start,stop 及 step 参数进行,从原数组中切割出一个新数组。
2.2从Python到Numpy
2.2.1Python数据类型的缺陷
1. 在 C 语言中,每个变量的数据类型被明确地声明;而在 Python 中,类型是动态推断的。
2.2.2理解Python列表内存管理机制
2.2.3从Python列表到Numpy数组
1、np.random.random(size):返回规模为size的服从均匀分布的随机浮点数数组,位于半开区间
[0.0,1.0)2 、 np.random.rand(d0, d1, ..., dn) 返回规模为 d0×d1×…×dn 的服从均匀分布的随机浮点数数组 , 位于半开区间 [0.0, 1.0)3 、 np.random.randint(low,high,size): 返回规模为 size 的服从均匀分布的随机整形数组,位于半开区间 [low,high), 不包括 high 这个整数。4 、 np.random.normal(mean, std, size): 返回规模为 size 的服从高斯分布的随机整形数组, mean 为均值, std 为方差。
1、np.zeros(size):返回规模为size的全0数组
2、np.ones(size):返回规模为size的全1数组
3、np.empty(size):返回规模为size的未初始化的数组(即数组的值保持着原内存中的数值)
4、np.eye(n):返回规模为n*n的单位矩阵
5、np.full(size,fill_value):返回规模为size的用fill_value填充的数组
6、np.arange([start, ]stop, [step, ]):返回从start到stop,步长为step的一维向量。与
python 的 range() 函数类似。 start 默认为 0 , step 默认为 1 。参数中包含 [] 代表可选参数。
7、np.linspace(start, stop, num=50):返回一个从start到stop区间均匀分为num份的一维向量。
num 默认值为 50 。
习题
1. 创建一个3×3的、在0~1均匀分布的随机数组成的数组。
import numpy as np
A = np.random.random((3,3))
print(A)
2. 创建一个3×3的、均值为0、方差为3的正态分布的随机数数组。
import numpy as np
A = np.random.normal(0,3,(3,3))
print(A)
import numpy as np
A = np.random.randint(0,10,(3,3))
print(A)
import numpy as np
A = np.zeros((4,))
print(A)
import numpy as np
A = np.ones((3,),dtype=int)
print(A)
import numpy as np
A = np.empty((3,2))
print(A)
import numpy as np
A = np.full((3,2,2),3)
print(A)
import numpy as np
A = np.eye(3)
print(A)
import numpy as np
A = np.arange(0,10,2)
print(A)
B = np.linspace(0,10,5)
print(B)
[0 2 4 6 8]
[ 0. 2.5 5. 7.5 10. ]
2.2.4Numpy标准数据类型
np.zeros(10, dtype='int16')
或者使用NumPy 对象 np. 对参数 dtype 指定特定类型:
np.zeros(10, dtype=np.int16)
习题
import numpy as np
np_array_1 = np.zeros((5,))
np_array_2 = np.full((5,),1)
print(np_array_1)
print(np_array_2)
import numpy as np
A = np.arange(0,10,2)
print(A)
B = np.linspace(0,10,5)
print(B)
[0 2 4 6 8]
[ 0. 2.5 5. 7.5 10. ]
import numpy as np
np_array_1 = np.zeros((5,))
np_array_2 = np.full((5,),1)
print(np_array_1)
print(np_array_2)
print(np_array_1, np_array_1.dtype, type(np_array_1[0]))
[0. 0. 0. 0. 0.] float64 <class 'numpy.float64'>
2.3Numpy数组基础操作
2.3.1随机数生成机制
习题
观察结果并回答,如果设置 seed() 参数为一样,那么随机结果是否发生变化。任意修改 seed()
import numpy as np
np.random.seed(5)
a = np.linspace(1,10,5)
b = np.linspace(1,10,5)
print(a)
print(b)
2.3.2Numpy数组的常见属性
首先定义三个随机的数组:一个一维数组、一个二维数组和一个三维数组。
import numpy as np
np.random.seed(0) # 设置随机数种子
x1 = np.random.randint(10, size=6) # 一维数组
x2 = np.random.randint(10, size=(3, 4)) # 二维数组
x3 = np.random.randint(10, size=(3, 4, 5)) # 三维数组
import numpy as np
np.random.seed(0)
X = np.random.randint(10,size=(3,4,5))
print("X ndim: ", X.ndim)
print("X shape:", X.shape)
print("X size: ", X.size)
print("X dtype:", X.dtype)
2.3.3索引访问数组元素
import numpy as np
np.random.seed(0) # 设置随机数种子
x1 = np.random.randint(10, size=6) # 一维数组
print(x1)
print(x1[0])
print(x1[4])
x2 = np.random.randint(10, size=(3, 4)) # 二维数组
print(x2)
print(x2[0, 0])
print(x2[2, 0])
print(x2[2, -1])
x = np.random.randint(10, size=(3,3,3)) # 二维数组
print(x)
print(x[0,0,0])
print(x[2,0,0])
print(x[2,0,-1])