嵌套列表就是列表中的元素也是列表的列表。

多维数组

二维数组

三维数组

  • ndim:多维数组维度的个数。例如:二维数组的 ndim 为 2;
  • shape:多维数组的形状。它是一个元组,每个元素分别表示每个维度中数组的长度。对于 m 行和 n 列的的数组,它的 shape 将是 (m, n)。因此,shape 元组的长度(元素个数)就是 ndim 的值;
  • size:多维数组中所有元素的个数。shape 元组中每个元素的乘积就是 size 的值;
  • dtype:多维数组中元素的类型。

二维数组的加减乘除

数据形状不同

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制,它具体的规则是:在较小维度数组的 shape 元组前补 1,直到两个数组的 shape 元组长度相同。接着将元素在值为 1 的维度上进行复制,直到两个数组的形状相同。如果无法使两个数组的形状相同,则会抛出 ValueError: operands could not be broadcast together 的异常。

二维数组的通用方法

什么是 轴? 点击一下 轴(axis)。轴和维度的概念是类似的,一维数组有 1 个轴,二维数组有 2 个轴,三维数组有 3 个轴

在一维数组中,axis=0 就代表着它唯一的轴;二维数组中 axis=0axis=1 代表其中的行轴和列轴;在三维数组中,axis=0axis=1axis=2 分别代表对应的三条轴。

二维数组的索引和分片

data[m, n]其中 data 是二维数组,m 是行索引或分片,n 是列索引或分片。

布尔索引

and 改用 &or 改用 |not 改用 ~,并且每个条件要用括号括起来。

1
2
3
4
5
6
7
8
data = np.array([[1, 2], [3, 4], [5, 6]])
# 大于 3 或者小于 2
print(data[(data > 3) | (data < 2)])
# 输出:[1 4 5 6]

# 大于 3 或者不小于 2(即大于等于 2)
print(data[(data > 3) | ~(data < 2)])
# 输出:[2 3 4 5 6]

实用方法

arange()、rand()、randint()、genfromtxt()

  • genfromtxt() 方法常用的参数有两个,分别是数据源和分隔符。

均方误差

常被作为模型的损失函数,用来预测和回归

n 是数据集的个数,Y_prediction 是模型预测的结果集,Y 是实际的数据集。将预测的结果和实际的值作差后进行平方求和,最后除以数据集的个数,得到的就是均方误差。均方误差越小,说明模型预测的越准确,反之则越不准确。

1
2
3
4
5
predictions = np.array([1, 1, 1])
labels = np.array([1, 2, 3])
error = (1 / labels.size) * np.sum(np.square(predictions - labels))
print(error)
# 输出:1.6666666666666665

练习