Numpy的基本介绍(一)
1、Numpy总述
1.1 Introduction
-
Numpy是Python中在数据科学方面一个基础的包。它可以创建多维数组和派生对象,也可对数据进行多种操作,包括基础运算、log操作、形状变换、排序、切片、傅立叶变换、基本线性代数操作、基本统计操作、随机数模拟等。
-
Numpy的核心是ndarray object,它封装了数据类型相同的n维数组。在代码编译时可执行多种操作以便提高性能。Numpy数组和Python数组的差别主要有以下几点:
1⃣️Numpy的数组在创建时便确定了数组的维度,不能根据后期需要动态改变。如果需要改变数组的维度,需要创建一个新数组,删删除原始数组。
2⃣️Numpy的数组具有相同的数据类型,所需的内存大小一致。
3⃣️需要进行大量高级数学运算时,Numpy数组具有更好的性能。和Python的内置数组相比,它具有低代码和高执行效率的特点。
4⃣️越来越多基于Python包的科学和数学运算都使用了Numpy数组。它们都支撑Pytho数组的输入,然后转换为Numpy数组。另外,为了更好的使用Python中的数学科学工具,仅会使用内置序列并不足够,会使用Numpy是必须的。
1.2 Why is Numpy fast?
矢量化没有了繁复的循环、索引。当然,这些都是在预编译C代码的幕后发生。下面列举了矢量化代码的一些优点:
- 矢量化代码简洁易读
- 矢量化代码的代码量更少,Bug也会随之减少
- 矢量化代码和标准数学操作的符号类似
- 矢量化代码更“Pythonic”。不做矢量化代码整洁性差,多重循环使得阅读困难。
2、Numpy quickstart
2.1 Numpy 的加载
import numpy as np
2.2 Array的创建
函数 | 说明 |
---|---|
np.array | 可以传入python的list或者tuple,创建基本的numpy数组 |
np.zeros | 创建一个全0的数组 |
np.ones | 创建一个全1数组 |
np.empty | 创建一个随机初始化的数组,元素的值。元素值取决于内存状态。 |
np.arange | 类似于Python中的range的用法。但是返回的是一个数组 |
np.linspace | 当arange和浮点数一起使用时,由于浮点数精度的问题,不能去预测元素的个数。因此使用linspace接收我们想要的元素 |
说明:以上创建数组时均可指定数组元素的类型,以及数组的维度
示例:
# 例1:np.array
df = np.array([i for i in range(5)])
df
# 结果
array([0, 1, 2, 3, 4])
# 例2:np.zeros
df = np.zeros((3,4), dtype=np.float32)
df
# 结果
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]], dtype=float32)
# 例3:np.ones
df = np.ones((3,2,2), dtype=np.int16)
df
# 结果
array([[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]]], dtype=int16)
# 例4:np.empty
df = np.empty((2,3))
df
# 结果
array([[0., 0., 0.],
[0., 0., 0.]])
# 例5:np.arange
df = np.arange(10,30,5)
df
# 结果
array([10, 15, 20, 25])
# 例6:
df = np.linspace(0,2,9)
df
# 结果
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
2.3 基本操作
对数组元素的基本操作,就是创建以计算结果填充的新数组
运算符号 | 符号含义 |
---|---|
+ | 对应元素相加 |
- | 对应元素相减 |
@(dot) | 矩阵乘法(满足矩阵乘法的要求) |
* | 对应元素相乘 |
说明:加法、减法和乘法满足广播机制
2.4 numpy中的浅拷贝和深拷贝
浅拷贝:浅拷贝当修改一个变量时另外一个变量也会随之改变,浅拷贝的几种方式:=,view(),切片。
深拷贝:通过copy()实现。当修改其他变量时,被拷贝对象的值不会发生改变
详细参见官网: https://numpy.org/doc/stable/user/quickstart.html#basic-operations
View or Shallow Copy / Deep Copy
3、numpy.random模块的使用
函数名称 | Parameters | 参数说明 | 函数解释 |
---|---|---|---|
rand | np.random.rand(d0, d1,…dn) | d0参数决定数组的形状,必须为非负int | 输出给定形状的随机数 |
randint | np.random.randint(low, high, size, dtype) | low,high取值的下限和上限;size输出数组的形状,dtype输出数据的类型 | 返回从low到high的随机整数 |
randn | np.random.randn(d0,d1,…dn) | 位置参数,非负int | 从标准分布中返回一个随机数 |
random | np.random.random(size=None) | 返回数组的形状 | 半开区间内的随机浮点数 |
normal | np.random.normal(loc, scale, size) | loc分布的均值、scale分布的方差,以及size决定返回数组的形状 | 从高斯分布中返回一个随机数。在深度学习中对参数做初始化时常用 |
numpy官网:https://numpy.org/doc/stable/reference/random/generated/numpy.random.rand.html