python的numpy库

Python
79
0
0
2024-04-23
标签   Python库

NumPy库极大地简化了向量和矩阵的操作和处理,在Python 生态系统中广泛用于数据分析、机器学习和科学计算。一些主流的流行包也依赖 NumPy 包括 scikit-learn、SciPy、pandas 和 tensorflow)。

这里用图例介绍NumPy的一些主要用法,以及它如何表示不同类型的数据(表格、图像、文本等),然后才能将它们提供给机器学习模型。

一、生成一个数组

1.1 分配对象

import numpy as np

data = np.array([1,2,3])
print(data)

data2 = np.array([[1,2],[3,4]])
print(data2)

1.2 初始化

import numpy as np

# 1-D array
print(np.ones(3))
print(np.zeros(3))
print(np.random.random(3))

# 2-D array, 注意这里是"(3,2)", 不是"3,2"
print(np.ones((3,2)))
print(np.zeros((3,2)))
print(np.random.random((3,2)))

二、数组运算

2.1 数组加减乘除

import numpy as np

print(np.array([1,2]) + np.ones(2))
print(np.array([1,2]) - np.ones(2))
print(np.array([1,2]) * np.ones(2))
print(np.array([1,2]) / np.ones(2))

# 也可以这样写
print(np.array([1,2]) + 1)
print(np.array([1,2]) - 1)
print(np.array([1,2]) * 1.6)
print(np.array([1,2]) / 1)

NumPy 把每个单元格进行运算称为广播

2.2索引/切片

import numpy as np

data = np.array([1,2,3])
print(data)
print(data[0])
print(data[1])
print(data[0:2])
print(data[1:])

2.2 聚合

import numpy as np

data = np.array([1,2,3])
print(data)
print(data.max())
print(data.min())
print(data.sum()) 
print(data.mean()) #平均值
print(data.prod()) #所有数相乘
print(data.std()) #标准差
#还有更多运算函数...

2.3 矩阵运算

仅当不同维度为一时(矩阵只有一列或一行),我们才可以对不同大小的矩阵进行这些算术运算,在这种情况下,NumPy 使用其广播规则进行该运算。

import numpy as np

data = np.array([[1,2],[3,4]])
data2 = np.ones((2,2))
print(data + data2)

# data3 为一维数组,这种行为也称为运算broadcast
data3 = np.ones(2)
print(data + data3)

相同矩阵相加

运算扩散图示:

点积:

NumPy 提供了dot()方法对矩阵进行点积运算:

import numpy as np

data = np.array([1,2,3])
powers_of_ten = np.array([[1,10],[100,1000],[10000,100000]])
print(data.dot(powers_of_ten))

2.4 矩阵索引

import numpy as np

data = np.array([[1,2],[3,4],[5,6]])
print(data)
print(data[0,1])
print(data[1:3])
print(data[0:2,0])

2.5 矩阵聚合

import numpy as np

data = np.array([[1,2],[3,4],[5,6]])
print(data)
print(data.max())
print(data.min())
print(data.sum())

我们不仅可以聚合矩阵中的所有值,还可以使用参数跨行或列进行聚合axis

import numpy as np

data = np.array([[1,2],[3,4],[5,6]])
print(data)
print(data.max(axis=0))
print(data.max(axis=1))

2.6 矩阵转置

import numpy as np

data = np.array([[1,2],[3,4],[5,6]])
print(data)
print(data.T)

2.7 矩阵的维度重建

数据集合是一样的,但是想改变矩阵的维度。在机器学习应用程序中经常出现这种情况,其中某个模型期望输入的形状与数据集不同。NumPy 的reshape()方法在,只需将所需的矩阵新维度传递给它即可。NumPy 可以根据矩阵推断出正确的维度。

import numpy as np

data = np.array([1,2,3,4,5,6])
print(data)
print(data.reshape(2,3))
print(data.reshape(3,2))

三、数学公式实战

我们要对这个数学公式用numpy表达

那么可以降解成数组predictions和数组labes的一些数学运算。从里面的数组减-> 平方square -> 求和sum -> 数组乘broadcast。

import numpy as np

predictions = np.array([1,1,1])
labels = np.array([1,2,3])
print(predictions - labels)
print(np.square(predictions - labels))
print(np.sum(np.square(predictions - labels)))
print((1/3) * np.sum(np.square(predictions - labels)))

四、numpy的一些应用

4.1 表格和电子表格

  • Excel表格是二维矩阵。另外很多库比如panda的dataframe也使用 NumPy构建。

4.2 多媒体的数字化

4.2.1 音频和时间序列

  • 声音通过采样变成一维数组的音频文件。达到CD音质的音频每秒可能有 44,100 个样本,每个样本是 -32767 到 32768 之间的整数。如果有一个10 秒 WAVE 文件,加载到Numpy就是长度为 10 * 44,100数组= 441,000 个样本。想要提取音频的第一秒,只需将文件加载到我们将调用的 NumPy 数组中audio,然后获取audio[:44100]

下面是音频文件的一个片段:

4.2.2 图片

  • 图像是大小(高 x 宽)像素的矩阵。
  • 如果图像是黑白的(也称为灰度),则每个像素可以用单个数字表示(通常在 0(黑色)和 255(白色)之间)。想要裁剪图像左上角 10 x 10 像素部分,只需用NumPy 来找image[:10,:10]

下面是图像文件的一部分:

  • 如果图像是彩色的,则每个像素由三个数字表示 - 红色、绿色和蓝色各一个值。在这种情况下,我们需要一个第三维(因为每个单元格只能包含一个数字)。因此,彩色图像由尺寸为(高 x 宽 x 3)的 ndarray 表示。

4.2.3 语言

如果我们处理文本,情况就会有所不同。文本的数字表示需要构建词汇表(模型知道的所有唯一单词的清单)和word2vec。词汇表举例

然后可以将句子分解为标记数组:

然后我们用词汇表中的 id 替换每个单词:

这些 ID 仍然无法为模型提供太多信息价值。因此,在将单词序列输入模型之前,需要用它们的嵌入替换标记/单词(在本例中为 50维的word2vec):

这个 NumPy 数组的维度为 [embedding_dimension x sequence_length]。出于性能原因,深度学习模型倾向于保留批量大小的第一个维度(因为如果并行训练多个示例,则可以更快地训练模型)。reshape()这是一个非常有用的明显案例。例如BERT这样的模型期望其输入的形状为:[batch_size,sequence_length,embedding_size]。

现在,这是一个模型以供模型训练(或预测)。