EduCoder实训机器学习

本教程涵盖Numpy数组的创建、索引、基本运算及高级功能如ufunc的应用,通过实践练习帮助读者掌握Numpy的基本操作。

Numpy科学计算

第1关:数组创建

#### 相关知识

在 Python 中创建数组有许多的方法,这里我们使用 Numpy 中的`arange`方法快速的新建一个数组:

```Plain Text
import numpy as npa = np.arange(5)
```


其中`import numpy as np`是指引入`Numpy`这个库,并取别名为`np`。之所以取别名,是为了代码编写的方便。`a=np.arange(5)`是指将数值`0 1 2 3 4`赋值给`a`这个变量,这样我们就快速的创建了一个一维数组。

创建多维数组的方法是:

```Plain Text
import numpy as npb = np.array([np.arange(6),np.arange(6)])
```


这里,我们使用两个`arange`方法,创建了两个`1x6`的一维数组,然后使用`numpy`的`array`方法,将两个一维数组组合成一个`2x6`的二维数组。从而达到了创建多维数组的目的。

`numpy`创建的数组可以直接复制,具体代码示例如下:

```Plain Text
import numpy as npx = [y for y in range(6)]b=np.array([x]*4)
```


该段代码会创建一个`4*6`的数组。

#### 编程要求

本关的任务是,补全右侧编辑器中 `Begin-End` 区间的代码,以实现创建一个`m*n`的多维数组的功能。具体要求如下:

- 函数接受两个参数,然后创建与之对应的的多维数组;

- 本关的测试样例参见下文。

本关设计的代码文件`cnmda.py`的代码框架如下:

```Plain Text
# 引入numpy库import numpy as np# 定义cnmda函数def cnmda(m,n):    '''    创建numpy数组    参数:         m:第一维的长度         n: 第二维的长度    返回值:        ret: 一个numpy数组    '''    ret = 0    # 请在此添加创建多维数组的代码并赋值给ret    #********** Begin *********#    #********** End **********#    return ret
```


#### 测试说明

本关的测试过程如下:

- 平台运行`step1/cnmdatest.py`文件,并以标准输入方式提供测试输入;

- `cnmdatest.py`文件调用`cnmda`中的`cnmda`方法,平台获取`cnmdatest.py`的输出,然后将其与预期输出作对比,如果一致,则测试通过;否则测试失败。

# 引入numpy库

import numpy as np

# 定义cnmda函数

def cnmda(m,n):

    '''

    创建numpy数组

    参数:

        m:第一维的长度

        n: 第二维的长度

    返回值:

        ret: 一个numpy数组

    '''

    ret = 0

    # 请在此添加创建多维数组的代码并赋值给ret

    #********** Begin *********#

    b=np.arange(n);

    ret = np.array([b]*m)

    #********** End **********#  

    return ret

第2关:切片索引

#### 相关知识

为了完成本关任务,你需要掌握:

- 索引;

- 遍历;

- 切片。

##### 索引

`ndarray`的索引其实和`python`的`list`的索引极为相似。元素的索引从`0`开始。代码如下:

```Plain Text
import numpy as np
# a中有4个元素,那么这些元素的索引分别为0,1,2,3
a = np.array([2, 15, 3, 7])
# 打印第2个元素
# 索引1表示的是a中的第2个元素
# 结果为15print(a[1])
# b是个2行3列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
# 打印b中的第1行
# 总共就2行,所以行的索引分别为0,1
# 结果为[1, 2, 3]print(b[0])
# 打印b中的第2行第2列的元素
# 结果为5print(b[1][1])
```


##### 遍历

`ndarray`的遍历方式与`python`的`list`的遍历方式也极为相似,示例代码如下:

```Plain Text
import numpy as np
a = np.array([2, 15, 3, 7])

# 使用for循环将a中的元素取出来后打印
for element in a:  
print(element)

# 根据索引遍历a中的元素并打印
for idx in range(len(a)): 
print(a[idx])

# b是个2行3列的二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])

# 将b展成一维数组后遍历并打印
for element in b.flat:  
print(element)

# 根据索引遍历b中的元素并打印
for i in range(len(b)):   
for j in range(len(b[0])):     
print(b[i][j])
```


##### 切片

`ndarray`的切片方式与`python`的`list`的遍历方式也极为相似,对切片不熟的同学也不用慌,套路很简单,就是用索引。

假设想要将下图中紫色部分切片出来,就需要确定行的范围和列的范围。由于紫色部分行的范围是`0`到`2`,所以切片时行的索引范围是`0:3`(**索引范围是左闭右开**);又由于紫色部分列的范围也是`0`到`2`,所以切片时列的索引范围也是`0:3`(**索引范围是左闭右开**)。最后把行和列的索引范围整合起来就是`[0:3, 0:3]`(**`,`左边是行的索引范围**)。当然有时为了方便,`0`可以省略,也就是`[:3, :3]`。

![312001](https://flowus.cn/preview/60d1eeee-8138-41dc-a4ef-4f71c11ba9fb)

切片示例代码如下:

#### 编程要求

在图像处理中,我们通常会将我们感兴趣的区域提取出来再进行处理,而这个感兴趣区域成为`ROI`(`Region Of Interest`)。本关的任务是根据提示,在右侧编辑器`Begin-End`处补充代码,根据测试用例的输入将`ROI`的提取并返回(`ROI`是一个矩阵)。

- 具体要求请参见后续测试样例。

请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!

#### 测试说明

平台会对你编写的代码进行测试。你只需按要求完成`get_roi(data, x, y, w, h)`函数即可。其中:

- `data`:待提取`ROI`的原始图像数据(其实就是个二维数组),类型为`ndarray`;

- `x`: `ROI`的左上角顶

### 头歌 P 实训机器学习的相关资料 头歌(EduCoder)是一个专注于实践教学的在线平台,提供了丰富的编程项目和实验资源。对于机器学习领域,可以通过该平台获取一些基础到高级的课程内容以及实际操作案例。 #### 1. **常用算法介绍** 在头歌平台上可能涉及的机器学习算法包括但不限于以下几种: - 基于传统计算机视觉技术的人脸检测方法,例如Haar级联分类器[^1]。 - 面部特征提取的经典算法LBPH(Local Binary Patterns Histograms)[^1]。 - 利用深度学习框架实现更精确的目标识别,比如OpenCV中的Dnn模块、FaceNet等预训练模型。 #### 2. **Python代码实现指导** 为了能够顺利开展基于Python语言的机器学习项目,在开始之前需要安装必要的库文件。这一步骤通常涉及到NumPy, Pandas, Scikit-Learn以及其他特定用途的扩展包[^2]。下面展示了一个简单的例子来说明如何利用已有的预理函数完成数据转换: ```python from sklearn.preprocessing import StandardScaler import numpy as np def preprocess_pipeline(): scaler = StandardScaler() return lambda data: scaler.fit_transform(data) train_data = np.array([[1., 2.], [3., 4.]]) preprocess_pipeline = preprocess_pipeline() X_train = preprocess_pipeline(train_data) print(X_train) ``` 此段脚本展示了标准化缩放的过程,并最终得到适合进一步建模使用的数值型输入特性矩阵`X_train`。 #### 3. **机器学习基本概念解析** 机器学习的核心在于让计算设备具备自主发现规律的能力。具体而言,当面对一组未经标注的数据集时,系统会先对其进行初步剖析,接着探索其中隐藏的信息结构诸如几何形态、尺寸比例或者色彩分布等方面的特点[^3]。随后依据所得结论执行相应的判断任务——无论是分类还是聚类等问题均适用于此逻辑链条之上[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值