NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。同样的数值计算,使用Numpy比直接编写Python实现代码更简洁、性能更高效。它是目前Python数值计算中最为重要的基础包。
首先我们来看一个numpy运算和普通python运算的例子:
## 一个简单的加法
# python运算
a = [1,2,3,4,5]
b = [5,4,3,2,1]
c1 = []
for i in range(5):
c1.append(a[i]+b[i])
print(c1) # [6, 6, 6, 6, 6]
# numpy 运算
c2 = np.array(a)+np.array(b)
print(c2) # [6, 6, 6, 6, 6]
# 很明显,由于Python是先循环遍历再计算,Numpy直接计算,计算数量越大越节省时间。
# 这里就会有人问了,python列表不能直接相加吗?试验一下
print(a+b) # [1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
# 它的结果是这样的,并非我们想的那样,在python中[1,2,3]叫列表,而非数组
💙认识了numpy的作用后,我们现在来正式学习numpy吧!💗
一、创建数组
1.1、普通的创建数组与数组属性
a = np.array([1,2,3,4,5])
b = np.array(range(1,6))
c = np.arange(1,6) # arange与python内置方法range类似,只是前者是数组方法
print(a,b,c) # [1 2 3 4 5] [1 2 3 4 5] [1 2 3 4 5]
print(a.ndim) # 返回数组的维度数目(有几维) 1
print(a.shape) # 返回数组的维度(几行几列) (5,) 表示5行一列
print(a.dtype) # 返回数组的数据类型,数据类型有哪些,继续往下看吧 int32
print(a.size) # 返回数组索引数据元素的数目 5
d = np.array([[1,1]
,[1,1]
,[1,1]
,[1,1]])
print(d.shape) # (4,2) 表示4行两列 数组中的逗号分割行
1.2、 np.arange(start,end,step,dtype) 创建数字序列
a = np.arange(1,11)
print(a) # [ 1 2 3 4 5 6 7 8 9 10]
b = np.arange(1,11,2)
print(b) # [1 3 5 7 9] 指定了步长2
print(b.dtype) # int32 这里默认数据类型int32
c = np.arange(1,11,2,'float64')
print(c.dtype) # float64 指定了数据类型
print(c) #[1. 3. 5. 7. 9.] 浮点型,所以带了小数点 小数点后的0不显示
1.3、 np.ones(维度)与np.ones_like(数组) 创建全1数组
## np.ones(维度)
a = np.ones([1,2]) # [1,2] 表示1行两列
print(a) # [[1. 1.]]
a = np.ones([2,1,2]) # [2,1,2] 表示三个维度,第一个维度有两份,每份都有1行2列的数组,就相当于把上面的结果复制了一份
print(a) # [[[1. 1.]],[[1. 1.]]]
## np.ones_like(数组) 返回和输入的数组有着相同的维度的数组
a = np.array([[1,2],[3,4],[5,6]])
print(a.shape) # (3, 2) # 3行两列
b = np.ones_like(a) # like就是像的意思,所以就是输出一个和数组a的维度相同的数组
print(b) # 输出如下图所示
1.4、 np.zeros(维度)与np.zeros_like(已有数组) 创建全0数组
## 与ones()、ones_like()用法一致
a = np.zeros([2,2],dtype='int32')
print(a)
a = np.array([[1,2],[3,4],[5,6]]) # (3,2)
b = np.zeros_like(a)
print(b)
1.5、 np.full(维度,填充值)与np.full_like(已有数组,填充值) 创建指定值数组
a = np.full([2,5],fill_value=3) # 生成2行5列的数组,填充值为3 即生成一个全是3的2行5列数组
print(a)
b = np.full_like(a,fill_value=10) # 生成与数组a相同的维度(2,5) 填充值为10
print(b)
1.6、 np.random() 生成随机数
函数名 | 说明 |
---|---|
seed(n) | 设定随机种子,只要每次的n一样,那么每次生成的随机数相同 |
rand(维度) | 返回数据在[0,1)之间,服从均匀分布 |
randn(维度) | 返回服从标准正态分布的数据 |
randint(low,high,size,dtype) | 返回[low,high}之间的随机整数 |
random | 生成[0.,1.)随机数 |
choice(array,size) | 从指定数组中产生随机数 |
shuffle(array) | 将数组随机排列 |
permutation(array) | 将数组进行随机排列,或生成数字的全排列 |
normal(loc,sca |