第七章课后作业高级篇

1.完善函数fun1,参数data是一个整型列表,将data中为偶数的数字抽取出来,并存入到一个数组中。 必须使用Numpy,返回结果为Numpy的ndarray类型。

def fun1(data=[1,2,3,4,5,6,7,8,9,10]):
    """
    Arg:
        data : a list as input; e.g. [1,2,3,4,5,6,7,8,9,10]
    return a Numpy ndarray; e.g. [ 2  4  6  8 10]
    """
    temp=np.array(data)
    ou=np.where(temp%2==0)
    return temp[ou]

2.完善函数fun2,参数data是一个整型列表,把data中小于5的数据替换为1,剩余数据替换为20。 必须使用Numpy,返回结果为Numpy的ndarray类型。

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

def fun2(data=[9,2,6,4,2,6,7,8,2,10] ):
    """
    Arg:
        data : a list as input; e.g. [9,2,6,4,2,6,7,8,2,10]
    return a Numpy ndarray; e.g. [20  1 20  1  1 20 20 20  1 20]
    """
    temp=np.array(data)
    ans=np.where(temp<5,1,20)
    return ans

3.完善函数fun3,参数data是一个列表(可能有多维),num是一个数字,返回data中与num差值最大的数。 (提示: np.abs, argmax, flat)

def fun3(data=[1,2,3,4,5,6,7],num=5):
    """
    Arg:
        data : a list as input; e.g. [1,2,3,4,5,6,7]
    return a number; e.g. 1

    """
    temp=np.array(data)
    ping=np.array(list(temp.flat))
    cha=np.abs(ping-num)
    ans=np.argmax(cha)
    return temp.flat[ans]

4.将a,b两个列表改为ndarray类型,并进行连接。连接时,让维度小的数据在前,维度大的数据在后。将维度小的数组进行调整,使其与维度大的数组的数组的shape相同,然后按维度较大数据的最后一个维度进行连接,返回连接后的ndarray。如果不能连接,返回空数组np.array([])

提示:np.concatenate

def fun4(a,b):
    '''
    eg.a=[3,3,3],b=[[1,2,3],[4,5,6],[7,8,9]]
    return a np.array e.g. [[3 3 3 1 2 3]
       [3 3 3 4 5 6]
       [3 3 3 7 8 9]]
    '''
    a1=np.array(a)
    b1=np.array(b)
    
    if a1.ndim>b1.ndim:
        a1,b1=b1,a1
        
    try:
        a2=a1+np.zeros_like(b1)
        return np.concatenate((a2,b1),axis=b1.ndim-1)
    except:
        return np.array([])

5.将列表a转换为array,并在指定维度ax的位置p插入x.(p为数字或与维度对应的列表)并返回。禁止用循环。

def fun5(a,p,x,ax):
    '''You need to convert the list to ndarray and insert p at position x.
     eg.a=[[1,1,1],[2,2,2],[3,3,3]]
     p=1
     x=5
     ax=1
     return a np.array 
     e.g. [[1 5 1 1]
           [2 5 2 2]
           [3 5 3 3]]
    '''
    a1=np.array(a)
    return np.insert(a1,p,x,axis=ax)

6.完成函数fun6,参数v是一个只有0和1的n*m矩阵,并求出其中1的个数

def fun6(v):
    '''
    Arg
    v:a 5*5 matrix ; return the total number of 1
    eg.[[0,1,1,0,1],
        [0,0,1,0,1],
        [0,1,1,0,0],
        [1,1,1,0,1],
        [1,0,1,0,1]]
    return 14
    '''
    v1=np.array(v)
    index=np.where(v1==1)
    return len(v1[index])

7.完成函数fun7,参数v是一个n*m的矩阵(二维列表,每个数是0-10的整数),求出每一行中最大值与最小值差的绝对值,返回类型为Numpy数组,并返回最大的一个绝对值所在行的索引。

def fun7(v):
    '''
    Arg
    v: a 3*3 matrix ; return the difference between the maximum and minimum of each row and number of rows with maximum difference
    eg
    [[3, 2, 7],
    [2, 8, 4],
    [9, 6, 1]]
    return  (array([5 6 8]), 2)
    '''
    diff=np.max(v,axis=1)-np.min(v,axis=1)
    return (diff,int(np.where(diff==np.max(diff))[0]))

8.完成函数fun8,v是一个n*m的二维整数列表(值的范围是:0-9),找出该二维数组出现次数最多的数字。返回结果是一个numpy数组,可能包含多个数值, 包含多值的时候按顺序排列。

提示:np.bincount, np.where

def fun8(v):
    """
    Arg:
        v: a Two-dimensional integer list.
    return a np.array include the most frequent number.
    e.g. v:[[0,0,0,2,0],
            [0,1,5,0,0],
            [0,0,2,0,0],
            [1,0,0,5,0],
            [0,1,0,0,0]]
         return: [0]
    """
    count=np.bincount(np.array(v).ravel())
    return np.where(count==max(count))[0]

9.完成函数fun9,求出列表内数据奇数总和与偶数总和的差值的绝对值。必须采用Numpy的函数。

def fun9(data):
    """
    Arg:
        data: a list as input; e.g. [1,2,3,4,5,6,7]
    return difference; e.g. 4
    """
    temp=np.array(data)
    ji=np.where(temp%2!=0)
    ou=np.where(temp%2==0)
    return np.abs(np.sum(temp[ji])-(np.sum(temp[ou])))

10.请完善以下函数fun10,data为一个一维整数型列表,该函数能找出其中第n个最小值出现的位置。

def fun10(data,n):
    """
    Arg:
        data : a list and a number as input; e.g. [1,2,1,1,3,4,3,1,1,2,1,1,2],5
    return a index of the target; e.g. 8
    """
    temp=np.array(data)
    ans=np.where(temp==np.min(temp))[0]
    return ans[n-1]

11.请完善以下函数fun11,data为一个二维整数型矩阵,该函数能将二维矩阵每一行的元素都减去该行的平均值。

def fun11(data):
    """
    Arg:
        data : a ndarray as input; e.g. [[7,2,0],[2,1,7],[5,8,3]]
    return a index of the target; e.g. [[ 4.         -1.         -3.        ]
                                        [-1.33333333 -2.33333333  3.66666667]
                                        [-0.33333333  2.66666667 -2.33333333]]
    """
    temp=np.array(data)
    ave=np.average(temp,axis=1)
    return temp-ave[:,np.newaxis]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值