序言

什么是 NumPy 呢?

NumPy 这个词来源于两个单词 – NumericalPython。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景:

  • 执行各种数学任务,如:数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于 Python 的 MATLAB 的快速替代。
  • 计算机中的图像表示为多维数字数组。NumPy 提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
  • 在编写机器学习算法时,需要对矩阵进行各种数值计算。如:矩阵乘法、求逆、换位、加法等。NumPy 数组用于存储训练数据和机器学习模型的参数。

练习作业

1. 创建从0到9的一维数字数组。

【知识点:数组的创建】

  • 如何创建一维数组?

【答案】

import numpy as nparr = np.arange(10)
print(arr)
# [0 1 2 3 4 5 6 7 8 9]

2. 创建一个元素全为True的 3×3 数组。

【知识点:数组的创建】

  • 如何创建一个布尔数组?

【答案】

import numpy as nparr = np.full([3, 3], True, dtype=np.bool)
print(arr)
# [[ True  True  True]
#  [ True  True  True]
#  [ True  True  True]]

3. 从arr中提取所有奇数。

  • arr = np.arange(10)

【知识点:搜索】

  • 如何从一维数组中提取满足指定条件的元素?

【答案】

import numpy as nparr = np.arange(10)# 方法1
index = np.where(arr % 2 == 1)
print(arr[index])
# [1 3 5 7 9]# 方法2
x = arr[arr % 2 == 1]
print(x)
# [1 3 5 7 9]

4. 将arr中的偶数元素替换为0。

  • arr = np.arange(10)

【知识点:搜索】

  • 如何用numpy数组中的另一个值替换满足条件的元素项?

【答案】

import numpy as nparr = np.arange(10)
index = np.where(arr % 2 == 0)
arr[index] = 0
print(arr)
# [0 1 0 3 0 5 0 7 0 9]

5. 将 arr 中的所有偶数元素替换为0,而不改变arr。

  • arr = np.arange(10)

【知识点:搜索】

  • 如何在不影响原始数组的情况下替换满足条件的元素项?

【答案】

import numpy as nparr = np.arange(10)# 方法1
x = np.where(arr % 2 == 0, 0, arr)
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]# 方法2
x = np.copy(arr)
x[x % 2 == 0] = 0
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]

6. 将 arr转换为2行的2维数组。

  • arr = np.arange(10)

【知识点:数组的操作】

  • 如何改变数组的形状?

【答案】

import numpy as nparr = np.arange(10)# 方法1
x = np.reshape(arr, newshape=[2, 5])
print(x)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]# 方法2
x = np.reshape(arr, newshape=[2, -1])
print(x)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]

7. 垂直堆叠数组a和数组b。

  • a = np.arange(10).reshape([2, -1])
  • b = np.repeat(1, 10).reshape([2, -1])

【知识点:数组操作】

  • 如何垂直叠加两个数组?

【答案】

import numpy as npa = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])print(a)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
#  [1 1 1 1 1]]# 方法1
print(np.concatenate([a, b], axis=0))
# [[0 1 2 3 4]
#  [5 6 7 8 9]
#  [1 1 1 1 1]
#  [1 1 1 1 1]]# 方法2
print(np.vstack([a, b]))
# [[0 1 2 3 4]
#  [5 6 7 8 9]
#  [1 1 1 1 1]
#  [1 1 1 1 1]]

8. 将数组a与数组b水平堆叠。

  • a = np.arange(10).reshape([2, -1])
  • b = np.repeat(1, 10).reshape([2, -1])

【知识点:数组的操作】

  • 如何水平叠加两个数组?

【答案】

import numpy as npa = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])print(a)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
#  [1 1 1 1 1]]# 方法1
print(np.concatenate([a, b], axis=1))
# [[0 1 2 3 4 1 1 1 1 1]
#  [5 6 7 8 9 1 1 1 1 1]]# 方法2
print(np.hstack([a, b]))
# [[0 1 2 3 4 1 1 1 1 1]
#  [5 6 7 8 9 1 1 1 1 1]]

9. 获取数组a和数组b之间的公共项。

  • a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
  • b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])

【知识点:集合操作】

  • 如何获取两个numpy数组之间的公共项?

【答案】

import numpy as npa = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
x = np.intersect1d(a, b)
print(x)  # [2 4]

10. 从数组a中删除数组b中的所有项。

  • a = np.array([1, 2, 3, 4, 5])
  • b = np.array([5, 6, 7, 8, 9])

【知识点:集合操作】

  • 如何从一个数组中删除存在于另一个数组中的项?

【答案】

import numpy as npa = np.array([1, 2, 3, 4, 5])
b = np.array([5, 6, 7, 8, 9])
x = np.setdiff1d(a, b)
print(x)  # [1 2 3 4]

11. 获取a和b元素匹配的位置。

  • a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
  • b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])

【知识点:逻辑函数】

  • 如何得到两个数组元素匹配的位置?

【答案】

import numpy as npa = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
mask = np.equal(a, b)# 方法1
x = np.where(mask)
print(x)  # (array([1, 3, 5, 7], dtype=int64),)# 方法2
x = np.nonzero(mask)
print(x)  # (array([1, 3, 5, 7], dtype=int64),)

12. 获取5到10 之间的所有元素。

  • a = np.array([2, 6, 1, 9, 10, 3, 27])

【知识点:逻辑函数】

  • 如何从numpy数组中提取给定范围内的所有元素?

【答案】

import numpy as npa = np.array([2, 6, 1, 9, 10, 3, 27])
mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))# 方法1
x = np.where(mask)
print(a[x])  # [ 6  9 10]# 方法2
x = np.nonzero(mask)
print(a[x])  # [ 6  9 10]# 方法3
x = a[np.logical_and(a >= 5, a <= 10)]
print(x)  # [ 6  9 10]

13. 交换数组arr中的列1和列2。

  • arr = np.arange(9).reshape(3, 3)

【知识点:索引与切片】

  • 如何交换二维数组中的两列?

【答案】

import numpy as nparr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]x = arr[:, [2, 1, 0]]
print(x)
# [[2 1 0]
#  [5 4 3]
#  [8 7 6]]

14. 交换数组arr中的第1行和第2行。

  • arr = np.arange(9).reshape(3, 3)

【知识点:索引与切片】

  • 如何交换二维数组中的两行?

【答案】

import numpy as nparr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]x = arr[[1, 0, 2], :]
print(x)
# [[3 4 5]
#  [0 1 2]
#  [6 7 8]]

15. 反转二维数组arr的行。

  • arr = np.arange(9).reshape(3, 3)

【知识点:索引与切片】

  • 如何反转二维数组的行?

【答案】

import numpy as nparr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]x = arr[::-1, :]
print(x)
# [[6 7 8]
#  [3 4 5]
#  [0 1 2]]

16. 反转二维数组arr的列。

  • arr = np.arange(9).reshape(3, 3)

【知识点:索引与切片】

  • 如何反转二维数组的列?

【答案】

import numpy as nparr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]x = arr[:, ::-1]
print(x)
# [[2 1 0]
#  [5 4 3]
#  [8 7 6]]

17. 创建一个形为5×3的二维数组,以包含5到10之间的随机数。

【知识点:随机抽样】

  • 如何创建随机二维数组?

【答案】

import numpy as npx = np.random.randint(5, 10, [5, 3])
print(x)
# [[5 8 8]
#  [5 6 8]
#  [8 8 7]
#  [6 7 9]
#  [6 5 8]]x = np.random.uniform(5, 10, [5, 3])
print(x)
# [[6.73675226 8.50271284 9.66526032]
#  [9.42365472 7.56513263 7.86171898]
#  [9.31718935 5.71579324 9.92067933]
#  [8.90907128 8.05704153 6.0189007 ]
#  [8.70753644 7.75056151 5.71714203]]

18. 只打印或显示numpy数组rand_arr的小数点后3位。

  • rand_arr = np.random.random([5, 3])

【知识点:输入和输出】

  • 如何在numpy数组中只打印小数点后三位?

【答案】

import numpy as nprand_arr = np.random.random([5, 3])
print(rand_arr)
# [[0.33033427 0.05538836 0.05947305]
#  [0.36199439 0.48844555 0.26309599]
#  [0.05361816 0.71539075 0.60645637]
#  [0.95000384 0.31424729 0.41032467]
#  [0.36082793 0.50101268 0.6306832 ]]np.set_printoptions(precision=3)
print(rand_arr)
# [[0.33  0.055 0.059]
#  [0.362 0.488 0.263]
#  [0.054 0.715 0.606]
#  [0.95  0.314 0.41 ]
#  [0.361 0.501 0.631]]

19. 将numpy数组a中打印的项数限制为最多6个元素。

【知识点:输入和输出】

  • 如何限制numpy数组输出中打印的项目数?

【答案】

import numpy as npa = np.arange(15)
print(a)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
np.set_printoptions(threshold=6)
print(a)
# [ 0  1  2 ... 12 13 14]

20. 打印完整的numpy数组a而不中断。

【知识点:输入和输出】

  • 如何打印完整的numpy数组而不中断?

【答案】

import numpy as npa = np.arange(15)
np.set_printoptions(threshold=6)
print(a)
# [ 0  1  2 ... 12 13 14]
np.set_printoptions(threshold=np.iinfo(np.int).max)
print(a)
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

当前活动


我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔

我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。

愿我们一起学习,一起进步,相互陪伴,共同成长。

后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:

Numpy入门教程:练习作业01相关推荐

  1. numpy 数组抽取_清晰易懂的Numpy入门教程

    原标题:清晰易懂的Numpy入门教程 翻译 | 石头 来源 | Machine Learning Plus Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pa ...

  2. python numpy教程_Python中的Numpy入门教程

    这篇文章主要介绍了 Python 中的 Numpy 入门教程,着重讲解了矩阵中的数组操作 , 需要的 朋友可以参考下 1 . Numpy 是什么 很简单, Numpy 是 Python 的一个科学计算 ...

  3. 《Oracle 入门教程》第 01 篇 专栏介绍

    文章目录 专栏背景 专栏内容 专栏寄语 大家好,我是只谈技术不剪发的 Tony 老师.欢迎来到我的专栏<Oracle 入门教程>!本专栏主要面向 Oracle 数据库的初学者,包括初级 D ...

  4. 《SQL 入门教程》第01篇 SQL 简介

    <SQL 入门教程>专栏目录 第01篇 SQL 简介 第02篇 查询初体验 第03篇 查询条件 第04篇 结果排序 第05篇 限定结果数量 第06篇 分组与汇总 第07篇 多表连接查询 第 ...

  5. Numpy入门教程:练习作业02

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  6. Numpy入门教程:01. 数组的创建与属性

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  7. Numpy入门教程:12. 线性代数

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  8. Numpy入门教程:11. 时间日期和时间增量

    序言 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  9. Numpy入门教程:07. 随机抽样

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

最新文章

  1. 【直播】张晋:心跳信号分类模型融合
  2. 京东618单日销售超10亿,B2C网购正成主流
  3. 压力测试即将开始,超前思维的128MB区块未必可行
  4. 应届生web前端面试题_2020最新Web前端经典面试题试题及答案(持续更新)
  5. jspServlet(2)
  6. catia齿轮宏程序_Catia宏程序
  7. (32)System Verilog模块调用包中类的方法
  8. 7年前的200电话卡帐号
  9. 63. windows php 加载不了 curl
  10. 关于[知识竞赛现场管理系统-双屏PPT版]内置的第三方答题平台以及[评委计分系统-双屏专业版]的特殊疑难问题 汇编
  11. java cronexpression_关于CronTrigger 的cronExpression用法
  12. html中复选框只能选一个,HTML选择三个不同的复选框并显示它们
  13. 查询iphone邮箱服务器,iPhone上的各种邮箱设置
  14. day16正则表达式作业
  15. 数据库Mysql:存储过程(PROCEDURE )函数(FUNCTION)
  16. xxm系统-DB中勒索病毒
  17. python 音频文件 转列表 比对相似度
  18. 微信小程序跳转公众号h5页面
  19. vue+springboot实现调用本地摄像头拍照上传后端使用百度ocr识别身份证信息
  20. 计算机系大一开学需要带什么,大一新生上学要不要带电脑?辅导员给出建议,家长可以参考...

热门文章

  1. MongoDB数据库(二:高级操作)
  2. HTML在网页设计中是什么作用?
  3. leetcode--电话号码和字母组合--python
  4. Azure自动化部署运维浅谈
  5. 云南实现手机自主补(换)领居民身份证
  6. React Native开源项目如何运行(附一波开源项目)
  7. 如何提升 CSS 选择器的性能?
  8. Build Boost C++ libraries for x32/x64 VC++ compilers on Windows
  9. linux 环境配置 安装jdk
  10. IronPython系列:Composite Pattern及其实现