Numpy初体验--第4关:Numpy数组的堆叠

任务描述
本关的目标是,改变Numpy数组的形状。

相关知识
使用Numpy,我们可以方便的更改数组的形状,比如使用reshape()、ravel()、flatten()、transpose()函数等。
具体的使用如下:

改变数组形状
reshape()

import numpy as np
In: b = np.arange(24).reshape(2,3,4)
In: b
Out: array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])

ravel()
拆解,将多维数组变成一维数组。

In:  b.ravel()
Out: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

flatten()
拉直,其功能与ravel()相同,但是flatten()返回的是真实的数组,需要分配新的内存空间,而ravel()仅仅是改变视图。

In:  b.flatten()
Out: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

shape()
使用元组改变数组形状。

In: b.shape = (6,4)
In: b
out: array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

transpose()
转置。

In: b.transpose()
Out: array([[ 0,  4,  8, 12, 16, 20],
       [ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23]])

数组的堆叠
从深度看,数组既可以横向叠放,也可以竖向叠放。因此,我们我们对数组进行堆叠,Numpy数组对堆叠包含以下几个函数:
首先,创建两个数组。

In: a = np.arange(9).reshape(3,3)
In: a
Out: array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In: b = a*2
In: b
Out: array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

hstack()
水平叠加。

In: np.hstack((a,b))  # 注意 这里是两层括号
Out: array([[ 0,  1,  2,  0,  2,  4],
       [ 3,  4,  5,  6,  8, 10],
       [ 6,  7,  8, 12, 14, 16]])

vstack()
垂直叠加。

In: np.vstack((a,b))
Out:array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

dstack()
深度叠加。

In: np.dstack((a,b))
Out: array([[[ 0,  0],
        [ 1,  2],
        [ 2,  4]],
       [[ 3,  6],
        [ 4,  8],
        [ 5, 10]],
       [[ 6, 12],
        [ 7, 14],
        [ 8, 16]]])

编程要求
本关的任务是,补全右侧编辑器中Begin-End区间的代码,分别实现Numpy数组的垂直叠加、水平叠加、深度叠加。具体要求如下:

函数接受两个参数,然后将两个参数进行叠加;
本关的测试样例参见下文;
本关设计的代码文件manipulation.py的代码框架如下:

# 引入numpy库
import numpy as np
# 定义varray函数
def  varray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的垂直叠加 并赋值给ret
    #********** Begin *********#
    #********** End **********#
    return ret
# 定义darray函数
def  darray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度叠加并赋值给ret
    #********** Begin *********#
    #********** End **********#
    return ret
 # 定义harray函数
def  harray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平叠加并赋值给ret
    #********** Begin *********#
    #********** End **********#
    return ret

测试说明
本关的测试过程如下:

平台运行step3/manipulationtest.py文件,并以标准输入方式提供测试输入;

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

 预处理数组:
a = np.array([[1,2,3],[4,5,6]]) 
b = np.array([[3,4,5],[7,8,9]])

以下是平台对step3/manipulationtest.py的测试样例:
测试输入:  v
预期输出:

[[1 2 3]
 [4 5 6]
 [3 4 5]
 [7 8 9]]

测试输入:  d
预期输出:

[[[1 3]
  [2 4]
  [3 5]]
 [[4 7]
  [5 8]
  [6 9]]]

答案

import numpy as np

def varray(m, n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的垂直叠加 并赋值给ret
    #********** Begin *********#
    ret = np.vstack((m, n))
    #********** End **********#
    return ret

def darray(m, n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度叠加并赋值给ret
    #********** Begin *********#
    ret= np.dstack((m, n))
    #********** End **********#
    return ret

def harray(m, n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平叠加并赋值给ret
    #********** Begin *********#
    ret = np.hstack((m, n))
    #********** End **********#
    return ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值