NumPy数组的高级操作第四关

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。是在学习机器学习、深度学习之前应该掌握的一个非常基本且实用的Python库。

本实训将介绍NumPy的一些更高级的知识与使用方法。实训通关后你将学会NumPy的进阶使用技能,并为后续的综合练习部分打好基础。如果你对NumPy的基础知识不熟,可以看看这里。

PS:若需要更加详细的查阅NumPy所提供的接口,可以查阅官方文档。
任务描述
相关知识
什么是广播
广播的原则
编程要求
任务描述
本关任务:利用广播机制实现Z-score标准化。

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

什么是广播;
广播的原则。
什么是广播
两个ndarray对象的相加、相减以及相乘都是对应元素之间的操作。

import numpy as np
x = np.array([[2,2,3],[1,2,3]])
y = np.array([[1,1,3],[2,2,4]])
print(x*y)
‘’’
输入结果如下:
[[ 2 2 9]
[ 2 4 12]]
‘’’
当两个ndarray对象的形状并不相同的时候,我们可以通过扩展数组的方法来实现相加、相减、相乘等操作,这种机制叫做广播(broadcasting)。

比如,一个二维的ndarray对象减去列平均值,来对数组的每一列进行取均值化处理:

import numpy as np

arr为4行3列的ndarray对象

arr = np.random.randn(4,3)

arr_mean为有3个元素的一维ndarray对象

arr_mean = arr.mean(axis=0)

对arr的每一列进行

demeaned = arr - arr_mean
很明显上面代码中的arr和arr_mean维度并不形同,但是它们可以进行相减操作,这就是通过广播机制来实现的。

广播的原则
广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失或长度为1的维度上进行,这句话是理解广播的核心。

广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。

我们来看一个例子:

import numpy as np
arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])
arr2 = np.array([1, 2, 3])
arr_sum = arr1 + arr2
print(arr_sum)
‘’’
输入结果如下:
[[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]]
‘’’
arr1的shape为(4,3),arr2的shape为(3,)。可以说前者是二维的,而后者是一维的。但是它们的后缘维度相等,arr1的第二维长度为3,和arr2的维度相同。

arr1和arr2的shape并不一样,但是它们可以执行相加操作,这就是通过广播完成的,在这个例子当中是将arr2沿着0轴进行扩展。

我们再看一个例子:

import numpy as np
arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]]) #arr1.shape = (4,3)
arr2 = np.array([[1],[2],[3],[4]]) #arr2.shape = (4, 1)
arr_sum = arr1 + arr2
print(arr_sum)
‘’’
输出结果如下:
[[1 1 1]
[3 3 3]
[5 5 5]
[7 7 7]]
‘’’
arr1的shape为(4,3),arr2的shape为(4,1),它们都是二维的,但是第二个数组在1轴上的长度为1,所以,可以在1轴上面进行广播。

编程要求
请在右侧编辑器Begin-End处补充代码,将输入数据转换为array并计算它们的和。

具体要求请参见后续测试样例。
请先仔细阅读右侧上部代码编辑区内给出的代码框架,再开始你的编程工作!
####测试说明
平台会对你编写的代码进行测试,对比你输出的数值与实际正确的数值,只有所有数据全部计算正确才能进入下一关。

测试输入:

[[9, 3, 1], [7, 0, 6], [4, 6, 3]] [1, 5, 9] [[9], [6], [7]]

预期输出:

[[19 17 19]
[14 11 21]
[12 18 19]]

import numpy as np
def student(a,b,c):
    result=[]
    # ********* Begin *********#
    a=np.array(a)
    b=np.array(b)
    c=np.array(c)
    result=a+b+c
    # ********* End *********#
    return result
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值