numpy 建立空数组_卧槽!图解NumPy,这一篇就够了

这篇博客通过图解的方式详细介绍了NumPy的基础操作,包括Numpy数组与Python列表的区别,向量运算(初始化、索引、运算),矩阵运算(axis参数、矩阵乘法、行向量与列向量),以及高维数组运算。内容覆盖了向量的创建、索引、统计运算和矩阵的排序、统计、拼接等,适合NumPy初学者学习。
摘要由CSDN通过智能技术生成

点击 机器学习算法与Python学习选择加星标

精彩内容不迷路

4261c06393422be7125df0eb19db468a.gif

晓查 编译整理 
量子位 报道 | 公众号 QbitAI

NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具。然而对初学者来说,NumPy的大量运算方法非常难记。

9c154b5d982538954802aa6c32e70842.png

最近,国外有位程序员讲NumPy的基本运算以图解的方式写下来,让学习过程变得轻松有趣。在Reddit机器学习社区发布不到半天就收获了500+赞。

fdf7777f73626e7374e2d603f23c1311.png

下面就让我们跟随他的教程一起来学习吧!

教程内容分为向量 (一维数组)、矩阵 (二维数组)、三维与更高维数组3个部分。

Numpy数组与Python列表

在介绍正式内容之前,先让我们先来了解一下Numpy数组与Python列表的区别。

乍一看,NumPy数组类似于Python列表。它们都可以用作容器,具有获取(getting)和设置(setting)元素以及插入和移除元素的功能。

两者有很多相似之处,以下是二者在运算时的一个示例:

f151d58a3ced283f75f4f4c504fd2f5e.png

和Python列表相比,Numpy数组具有以下特点:

更紧凑,尤其是在一维以上的维度;向量化操作时比Python列表快,但在末尾添加元素比Python列表慢。

6bbafbb77696ce8149874f801074399b.png

在末尾添加元素时,Python列表复杂度为O(1),NumPy复杂度为O(N)

向量运算

向量初始化

创建NumPy数组的一种方法是从Python列表直接转换,数组元素的类型与列表元素类型相同。

ad20ff51c8caed65483fa63d72dc49e4.png

NumPy数组无法像Python列表那样加长,因为在数组末尾没有保留空间。

因此,常见的做法是定义一个Python列表,对它进行操作,然后再转换为NumPy数组,或者用np.zerosnp.empty初始化数组,预分配必要的空间:

889a6b01c2e263ee335497cfd79162c3.png

有时我们需要创建一个空数组,大小和元素类型与现有数组相同:

d65a3b99d4a2fe5356cc086177ee7ac6.png

实际上,所有用常量填充创建的数组的函数都有一个_like对应项,来创建相同类型的常数数组:

defbc5ec9ad16de61e46803e98f93898.png

在NumPy中,可以用arange或者linspace来初始化单调序列数组:

4207d56075153eda5aee45b8fa4c311e.png

如果需要类似[0., 1., 2.]的浮点数组,可以更改arange输出的类型:arange(3).astype(float)。

但是有更好的方法:arange函数对数据类型敏感,如果将整数作为参数,生成整数数组;如果输入浮点数(例如arange(3.)),则生成浮点数组。

但是arange在处理浮点数方面并不是特别擅长:

f539b93d9a579a6793cac00ffbf2b2eb.png

这是因为0.1对于我们来说是一个有限的十进制数,但对计算机而言却不是。在二进制下,0.1是一个无穷小数,必须在某处截断。

这就是为什么将小数部分加到步骤arange通常是一个不太好的方法:我们可能会遇到一个bug,导致数组的元素个数不是我们想要的数,这会降低代码的可读性和可维护性。

这时候,linspace会派上用场。它不受舍入错误的影响,并始终生成要求的元素数。

出于测试目的,通常需要生成随机数组,NumPy提供随机整数、均匀分布、正态分布等几种随机数形式:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值