第七章课后作业

本文展示了如何使用Numpy库进行一系列数组操作,包括创建特定条件的数组,如不同数字、奇数索引元素、倒序数组等;还介绍了如何基于已有数组创建新数组,以及对二维数组进行切片和反转。此外,还定义了三个函数fun9、fun10和fun11,分别用于在整数间插入8、替换奇偶数和查找峰值索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建一个长度为10的整型数组v1。所有数字不能全部相同。

v1 = np.array([0,1,2,3,4,5,6,7,8,9])

2.创建一个新数组v2,包含第一个问题中创建的v1数组中的所有索引为奇数的元素。

v2 = v1[1::2]

3.采用数组v1的倒序创建一个新数组v3。

v3 = v1[::-1]

4.创建一个命名为m4的任意float类型二维数组,4行5列。所有数据不能完全相同。

m4 = np.linspace(0.1,20,num=20,endpoint=True)
m4.shape=(4,5)

5.以m4为基础创建一个新的二维数组m5,其中每一行都是m4对应行的倒序。

m5 = m4[::,::-1]

6.创建一个新数组m6,行和列都是m4的倒序。

m6 = m4[::-1,::-1]

7.忽略m4的第一行和最后一行,第一列和最后一列后,得到一个新的二维数组m7.

注意:注意:不要修改m4

m7 = m4[1:3,1:4]

8.创建一个2X3X4的全部为7的数组m8,提示:用Numpy的full函数。

m8 = np.full((2,3,4),7)

9.完善函数fun9,参数data是一个整型列表,在任意两个相邻整数之间插入2个8。必须使用numpy。返回结果为Numpy的ndarray类型。

注意:注意:本题严禁使用循环

def fun9(data=[1,2,3,4,5]):
    """
    Arg:
        data : a list as input; e.g. [1,2,3,4,5]
    return a Numpy ndarray; e.g. [1 8 8 2 8 8 3 8 8 4 8 8 5]
    """
    temp=np.array(data)
    nplst=np.full(3*len(data)-2,8)
    nplst[::3]=temp
    return nplst

10.完善函数fun10,参数data是一个整型列表,把data中奇数的数据替换为1, 偶数替换为-1。 必须使用numpy,返回结果为Numpy的ndarray类型。

提示:np.where(condition, x, y)

def fun10(data=[9,2,6,4,2,6,7,8,2,10]):
    """
    Arg:
        data : an array as input; e.g. array([9,2,6,4,2,6,7,8,2,10])
    return a Numpy ndarray; e.g. [ 1 -1 -1 -1 -1 -1  1 -1 -1 -1]
    """
    temp=np.array(data)
    nplst=np.where(temp%2==0,-1,1)
    return nplst

11.完成函数fun11(),从一维数组data中找到所有峰值的索引。说明:峰值点大于左右两侧的数据值,不包含端点。

提示: np.diff,np.sign,np.where(condition)

def fun11(data=[1, 3, 7, 1, 2, 6, 0, 1]):
    """
    Arg:
        data : a list as input; e.g. [1, 3, 7, 1, 2, 6, 0, 1]
    return a numpy ndarray; e.g. [2 5]
    
    """
    temp=np.array(data)
    cha=np.diff(temp)
    fuhao=np.sign(cha)
    cha_=np.diff(fuhao)
    ans=np.where(cha_==-2)[0]+1
    return ans

### 数据结构与算法第七章课后作业答案解析 对于数据结构与算法课程中的第七章课后作业,不同版本的教材会有不同的侧重和题目设置。以下是基于常见教材内容对这一章节可能涉及的知识及其对应练习题目的解析。 #### 一、树的概念理解 针对树这种非线性的逻辑结构,在该章节通常会考察基本概念的理解程度,比如定义、性质以及分类等。例如: - **判断题**:一棵度为零的二叉树是一棵空树。(错误) 正确的说法应该是:“一颗仅含有根节而无子结的二叉树也称为‘单节’或‘平凡’二叉树。”[^1] #### 二、遍历操作实现 掌握前序、中序、后续三种方式来访问二叉树各个顶的方法非常重要。这里给出一段简单的Python代码用于演示如何通过递归方法完成这些遍历动作: ```python class TreeNode: def __init__(self, value=0, left=None, right=None): self.value = value self.left = left self.right = right def preorder_traversal(root): if root is not None: print(root.value) preorder_traversal(root.left) preorder_traversal(root.right) def inorder_traversal(root): if root is not None: inorder_traversal(root.left) print(root.value) inorder_traversal(root.right) def postorder_traversal(root): if root is not None: postorder_traversal(root.left) postorder_traversal(root.right) print(root.value) ``` 此段程序展示了如何构建一个基础的二叉树类`TreeNode`并实现了三个函数分别用来执行先序(`preorder`)、中序(`inorder`) 和 后序 (`postorder`) 的遍历过程[^2]。 #### 三、应用实例分析 实际应用场景下的问题解决能力也是考核的重之一。以查找最小公共祖先为例,这是一个典型的利用二叉搜索特性解决问题的任务。下面是一个简化版的例子说明思路: 假设给定如下图所示的一颗BST(平衡二叉搜索树),我们需要找到两个指定数值所在位置之间的最近共同父辈节的位置。 ![image](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Binary_search_tree.svg/350px-Binary_search_tree.svg.png) 解决方案可以采用迭代法自底向上回溯路径直至遇到第一个分岔口即为目标结果;也可以借助于栈的数据结构保存沿途经过的所有节以便随时比较两者间的关系变化情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值