RaymondHuang
RaymondHuang
发布于 2023-09-03 / 75 阅读
1
0

矩阵表达数据与NumPy的基础运用

机器学习中的数据

· 我们前面提到了机器学习的四个核心是数据、模型、损失函数和优化,其中,数据基本都是以矩阵(Matrices)的形式来提供的,因此学会如何处理矩阵非常重要。

· 接下来我们会选择使用Python中的NumPy库进行矩阵运算与处理。

为何选择以矩阵的方式表达数据

· 世界上的数据基本上都可以用矩阵的方式来表达,接下来我们看一点例子。

· 时间序列数据(以音频数据为例)

我们把随着时间而产生的数据称为时间序列(Timeseries)数据,如上图表示的音频,它可以用1*n矩阵(向量)来表示每一秒的声音大小。

· 图片(灰度图与彩色图)

灰度图就是一个矩阵,每一个像素表示的灰度值就是矩阵该位置的值;而彩色图就是R、G、B三张矩阵叠加出来的。

· 自然语言(Natural Language)

计算机科学家会把一句话转换为一个矩阵,例如字典向量法,具体方法留到NLP课程再讲。

NumPy的基础使用

· 创建一个NumPy数组(ndarray):

np.array([1,2,3])

· 其他创建数组的方法:

np.ones(3) # 创建一个长度为3的向量,用1填充数据
np.zeros(3) # 创建一个长度为3的向量,用0填充数据
np.random.random(3) # 创建一个长度为3的向量,内容随机

· 注意!上述创建的都是向量而不是矩阵!向量在NumPy中进行计算的时候会进行广播(Broadcasting),运算结果可能和想象的有所不同,比如:

print([1,2,3]) # 是一个向量,不是矩阵
print([[1,2,3]]) # 是一个矩阵,一行三列的矩阵

· 矩阵的加减乘除运算:

可以发现,乘法并不是线性代数中的矩阵乘法,而是元素对应相乘,相应的,线性代数中的矩阵是没有除法的,而NumPy是支持除法的,但是是对应元素相除。在矩阵乘1.6的时候,可以发现NumPy进行了一次广播,把1.6变为了一个向量进行乘法。

· 向量取元素的方式

· 求最大、最小、和

· 创建一个矩阵

np.array([[1,2],[3,4]]) # 创建一个两行两列矩阵

· 同理,可使用ones、zeros和random创建矩阵

· 矩阵的加减乘除运算跟向量是一样的

可以看到当data+ones_row的时候,NumPy进行了广播,使得加法可以进行。

· 线性代数上的矩阵乘法

可以看到,使用.dot函数就可以进行线性代数含义的矩阵乘法,在新版NumPy中,可以直接使用@符号进行乘法:

· 取出矩阵中的元素的方法和向量有一点不一样

可以看到,下标是[行,列]格式组成的。

· 矩阵也可以求最大最小值

· 如果想求所有行或所有列的最大值,指定axis参数即可,axis=0的时候是求行最大值,axis=1的时候是求列最大值

· 矩阵的转置(行变列、列变行)

· 更改矩阵的维度(形状)

· NumPy还支持创建张量(Tensor)


评论