在第四天,我们只需要用一点代码案例来巩固一下以前的内容就OK了。
以下是前面三天的教程链接,以及用于巩固的小问题:
arr
的所有元素乘以3
arr = np.array([[x for x in range(3)] for _ in range(3)])
arr
的最大值
和最小值
。arr
的标准差
和均值
。示例代码
import numpy as np
arr = np.array([1, 2, 3])
代码解析
在这段代码中,我们首先导入了numpy包,并使用别名np
引用它。然后,我们调用了np.array()
函数并传入了一个列表[1, 2, 3]
,来创建一个numpy数组。
示例代码
third_element = arr[2]
代码解析
这里我们通过索引访问numpy数组arr
中的第三个元素。由于Python中的索引是从0开始的,所以索引2对应于第三个位置的元素。
鉴于多数编程语言的索引都是从0开始,与生活习惯有点不同,通常,没有显式声明是索引,就按照从1开始的规则来进行(前些天的教程也是这么写的,但那时候并没有声明,这里为一些感到二义性的读者说声抱歉)。
示例代码
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
slice_1_2_3 = arr_2d[:3, :]
代码解析
在这段代码中,arr_2d
是一个3x3的二维数组。我们通过arr_2d[:3, :]
取出了前三行的所有数据。仅有冒号:
表示选取这一维度上的全部内容。
示例代码
arr_1d = np.arange(10)
arr_2d = arr_1d.reshape((10, 1))
代码解析
这里我们使用np.arange(10)
创建了一个0到9的一维数组。然后,我们使用reshape((10, 1))
将这个一维数组转换成了一个10行1列的二维数组。
示例代码
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr_vstack = np.vstack((arr1, arr2)) # 垂直合并
arr_hstack = np.hstack((arr1, arr2)) # 水平合并
代码解析
在这里,np.vstack()
用于垂直堆叠两个数组,而np.hstack()
用于水平堆叠两个数组。
示例代码
arr = np.array([1, 6, 3, 7, 9, 2, 5])
filtered_arr = arr[arr > 5]
代码解析
通过arr > 5
,我们创建了一个数组,仅包含原数组中大于5的元素。
更深入一点解析
arr > 5
,其实就是对arr
中所有元素进行了一次比较运算,运算结果是布尔值(真假值)
,例如1 > 5
的结果是False
。
当arr
的所有元素进行了比较运算后,会得到一个充满了True
和False
的布尔数组
,比如下面的代码。
bool_arr = arr > 5 # bool_arr中的元素只有True和False
如果写arr[bool_arr]
,也就是把布尔数组
传到中括号[]
内,numpy就会根据bool_arr
的内容对arr
进行筛选,True
则留下,False
则去除。
arr[bool_arr] # 因为bool_arr = arr > 5,这里和直接写arr[arr > 5]一样
arr
的所有元素乘以3示例代码
arr = np.array([[x for x in range(3)] for _ in range(3)])
arr_multiplied = arr * 3
代码解析
这段代码演示了Numpy数组的标量乘法运算。arr * 3
会将arr
中的每个元素都乘以3。
arr
的最大值和最小值示例代码
arr_max = arr.max()
arr_min = arr.min()
代码解析
max()
和min()
函数分别找出numpy数组中的最大和最小值。
arr
的标准差和均值示例代码
arr_std = arr.std()
arr_mean = arr.mean()
代码解析
std()
计算的是数组的标准差,即数据分散度的一种度量。mean()
计算的是数组的平均值。这两个函数为我们提供了数组分布的统计信息。
本文我们复习巩固了前三天所学习的常用操作,在即将到来的第五天的教程中,我们会结合之前学习的基础知识,使用Numpy实现两个简单的算法:Min-Max归一化
、Z-Score标准化
,这两种算法可以使我们的数据更加适合进行聚类算法
(我们可以通过聚类算法,挖掘出数据中潜在的关系)模型的建立。