线性代数主要是面向连续数学的学科,它是我们学习机器学习的基础数学之一。

1 张量

1.1 标量scalar

标量是 0 维张量,通常是一个单独的数。

# x1 是一个标量
x1 = 1

1.2 向量vector

向量是 1 维张量,通常是一列数,这些数是有序排列的,可以通过索引来获取。

# x2 是一个行向量(默认的向量这个名称是列向量的缩写)。
x2 = [1, 2, 3, 4]
# 获取
print(x2[1])
# 2

1.3 矩阵matrix

矩阵是 2 维张量,通常是一个二维数组,每个元素可以使用两个索引来定位。

# x3 是一个矩阵
x3 = [[1, 2],
      [3, 4]]
# 获取
print(x3[0][1])
# 2

1.4 张量tensor

通常我们把超过二维的数组叫做张量,每个元素的定位需要张量的维度个数的索引。

# x4 是一个张量
x4 = [[[1, 2], [3, 4]],
      [[5, 6], [7, 8]]]
# 获取
print(x4[0][1][1])
# 4

2 运算

2.1 矩阵转置

转置transpose操作是矩阵重要操作之一,它沿着左上角到右下角这条主对角线,将矩阵进行轴对称操作。

# x3 是一个矩阵
x3 = [[1, 2],
      [3, 4]]
# 转置
x3_trans = [[r[col] for r in x3] for col in range(len(x3[0]))]
print(x3_trans)
# [[1, 3], [2, 4]]
# 还有一个更高级的方法 list(map(list, zip(*x3))) 供你参考。