numpy科学计算入门

为什么要用numpy?

NumPy是一个开源的Python科学计算基础库,包含:
• 一个强大的N维数组对象 ndarray • 广播功能函数 • 整合C/C

小例子

import numpy as np
import time
start =time.time()
a =np.array([1,2,3,4])
b = np.array([1,2,3,4])
c =a**2+b**2
end =time.time()
timespeed =end -start
print(timespeed)
0.0004971027374267578

大家可以用列表进行同样的计算,对比一下花费的时间,numpy做这些方面的计算花费时间很少,这也是我们为什么要用numpy的原因,在进行数据分析的过程中,时间也是很重要。
下面我带大家一起来学习一下numpy中的ndarray数组

N维数组对象:ndarray

ndarray是一个多维数组对象,由两部分构成: • 实际的数据 • 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。
我后面所有的代码都是在jupyter上面做的,所以大家可以做一下准备工作。

#显示所有变量
from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all'

这个是为了方面查看输出的值,个人比较懒,不想用print()一一打印。

ndarray基本属性

import numpy as np
a = np.array([[1,2,3,4],[5,6,7,8]])#np.array()生成一个ndarray数组,在python别名叫做array
a
#五大属性
a.shape#ndarray对象的的尺度,对应矩阵的m行列
a.ndim#轴的数量或者维度的数量(秩)
a.size#每个ndarray对象元素的个数(大小)
a.dtype#元素的数据类型
a.itemsize#ndarray对象中每个元素的大小,以字节为单位

下面是输出结果,上面的属性我都进行了介绍,就不重复了。
在这里插入图片描述

ndarray数据类型

类型	类型代码	说明
int8、uint8	i1、u1	有符号和无符号的8位(1个字节)整型
int16、uint16	i2、u2	有符号和无符号的16位(2个字节)整型
int32、uint32	i4、u4	有符号和无符号的32位(4个字节)整型
int64、unint64	i8、u8	有符号和无符号的64位(8个字节)整型
float16  	f2	半精度浮点数
float32	f4或f	
标准的单精度浮点数。与C的float兼容

float64	f8或d	标准的双精度浮点数。与C的double和Python的float对象兼容
float128	f16或g	扩展精度浮点数
complex64、complex128、complex256	c8、c16、c32	分别用两个32位、64位或128位浮点数表示的复数
bool  	?	存储True和False值的布尔类型
object	O	Python对象类型
string_	S	固定长度的字符串长度(每个字符1个字节)。例如,要创建一个长度为10的字符串,应使用S10
unicode_	U	固定长度的unicode长度(字节数由平台决定)。跟字符串的定义方式一样(如U10)

ndarray的元素类型 ndarray为什么要支持这么多种元素类型?
对比:Python语法仅支持整数、浮点数和复数3种类型
• 科学计算涉及数据较多,对存储和性能都有较高要求
• 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
• 对元素类型精细定义,有助于程序员对程序规模有合理评估
numpy一般不建议非同质类型的ndarray数组进行计算,这样它的优势就体现不出来。与普通列表,元组计算没有区别。
ndarray数组可以由非同质对象构成,非同质ndarray元素为对象类型,非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用。
在这里插入图片描述
看一下这个例子就很清晰了。下面我们来看一下ndarray数组的创建。

ndarray数组的创建

创建的四种方法

• 从Python中的列表、元组等类型创建ndarray数组
• 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
• 从字节流(raw bytes)中创建ndarray数组
• 从文件中读取特定格式,创建ndarray数组

1.从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple)
x = np.array(list/tuple, dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

一般默认的是浮点数类型,因为常用的数据在科学计算中大多数是浮点数类型,很少用到是整数类型。
在这里插入图片描述

2.使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这些都是一些基础的生成数组操作,也是我们后面科学计算的基础,做好这个我们才有可以能接着后面的操作,上面的函数我都一一注释了,就不过过多的重复,我继续重复几个操作,控制生成数组的形式,以及用一些基础的函数。
在这里插入图片描述

3.使用NumPy中其他函数创建ndarray数组

在这里插入图片描述
实际本质也是差不多的。
第四种从文件中创建后面具体实例时我会仔细讲一下。

接下来我们谈一下数组的变换,这个也是为后面计算做铺垫的。

ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换,这一点在python科学计算和机器学习,深度学习都是非常重要的一部分。
1.维度变换

在这里插入图片描述
在这里插入图片描述
这里大家需要注意的是不要随便用(2,)这种结构,这个在后面计算会造成很大的干扰。

2.ndarray数组的类型变换

在这里插入图片描述
#在NumPy这个包中可以用相同的别名来表征与python精度相同的python数据类型。

ndarray数组向列表的转换

在这里插入图片描述

数组的索引和切片

数组对象在索引和切片形成的其实是原数组的视图,并没有生成新的数组。

一维数组的索引和切片

在这里插入图片描述

2.多维数组的索引

在这里插入图片描述

数组的切片

在这里插入图片描述
大家看一下下一个图片,这也是是我为啥说切片形成的是视图的原因。如果我们确实有需要的话用copy()方式。
在这里插入图片描述
在这里插入图片描述
一般的索引讲完了,我们来看看两个不同的索引。

布尔索引

其实也就是运用了布尔值,然后两个数组而已,只不过联系起来用的。但在使用这个的时候要注意,在索引数组是可以传入布尔值数组,但布尔值数组必须和数组轴索引长度一致,你甚至可以用切片或者整数值对布尔值数组进行混合和匹配。
在这里插入图片描述
在这里插入图片描述

神奇索引

其实就是为了选出一个符合顺序的子集,你可以简单地通过传递一个包含指明所需顺序的列表或者数组来完成。
在这里插入图片描述
在这里插入图片描述

ndarray的基本运算

ndarray其实就是把每一个ndarrya对象当做一个数值,来做简单的标量运算。
在这里插入图片描述
最后我们就来简单谈一些简单的计算函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我列举了一下一元函数,有的可能没有用,大家可以到网上查一下其他的函数。大家也可以看一下二元函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后numpy基础内容也就是这些了,有兴趣的可以深入了解一下,下一篇博客我会讲一下numpy中运用随机函数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章