Python数据分析--科学计算工具Numpy基础数据结构

Danica ·
更新时间:2024-09-20
· 859 次阅读

Numpy是Python开源的科学计算工具包,是一个非常高级的数值编程工具,具有强大的N维数组对象,对数组数据结构进行运算时不需要遍历循环,具有随机数,傅里叶变换,线性代数等基本功能。今天我们首先来讲一下Numpy基础的数据结构。
Numpy的数组是一个多维数组对象,成为ndarray,其是有两个部分组成:(1)实际的数据(2)描述这些数据的原数据,下面我们来看几个具体的例子:

import numpy as np #引入numpy模块,并将其命名为np ar=np.array([[1,2,3,4,5],[6,7,8,9,10],[2,3,4,5,6]])#通过arry()函数创建数组 print(ar,type(ar))#打印数组及数组类型 #print([1,2,3,4,5])#打印列表 print(ar.ndim)#查看生成的数据是几维的,或者说'秩',维度的数量也称rank print(ar.shape)#数组的维度,对于n行m列的数组,shape为(n,m) print(ar.size)#元素的个数 print(type(ar),ar.dtype)#dtype看数组里面数值的数据类型 print(ar.itemsize)#每个元素的字节大小 print(ar.data)#显示数组里面元素数据 print('-------')

输出结果:
在这里插入图片描述
Numpy数组具有以下基本属性:
(1)数组的维数成为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推
(2)在Numpy中,每一个线性数组称为一个轴(axes),秩即描述轴的数量

下面我们来看几个具体的函数:

(1)创建数组–array()
创建Numpy数组我们通常使用array()函数,这个函数用起来还是非常自由的,array()括号里面的数据类型很多,可以是列表,元祖,数组,生成器等等。我们来看一段简单的代码:

ar1=np.array(range(10))#利用生成器生成数组 ar3=np.array([1,2,3,4,5,6]) ar4=np.array([[1,2,3,4,5],['a','b','c','d','e'],[2,3,4,5,6]]) print(ar1) print(ar3) print(ar4) print(np.random.rand(10).reshape(2,5))#随机生成2*5的数值在0-1的数组

输出结果:
在这里插入图片描述
(2)创建数组–arange()
arange()函数与array()函数的区别是,array()函数创建时需要给出确定的值,而arange()函数是自己设定一定的范围和条件自动生成数值。

print(np.arange(10)) # 返回0-9,整型 print(np.arange(10.0)) # 返回0.0-9.0,浮点型 print(np.arange(5,12)) # 返回5-11 print(np.arange(5.0,12,2)) # 返回5.0-12.0,步长为2 print(np.arange(10000)) # 如果数组太大而无法打印,NumPy会自动跳过数组的中心部分,并只打印边角:

输出结果:
在这里插入图片描述
(3)创建数组–linspace()
linspace()函数使用并不是很频繁,它返回在间隔[开始,停止]上计算的num个均匀间隔的样本,例如:

ar1 = np.linspace(2.0, 3.0, num=5)#返回2.0-3.0之间均匀分布的5个值 ar2 = np.linspace(2.0, 3.0, num=5, endpoint=False) ar3 = np.linspace(2.0, 3.0, num=5, retstep=True) print(ar1,type(ar1)) print(ar2) print(ar3,type(ar3))

输出结果:
在这里插入图片描述
我们可以看到ar1和ar2和ar3输出的结果不一样,其差别在于endpoint和retstep参数。
endpoint参数默认为True,如果为True,则停止在最后一个样本,对于ar1而言,即停止在3.0,所以输出结果包括3.0,如果为False,则不包括最后一个样本值
retstep参数默认为False,如果为真,则返回(样本,步骤),其中步长是样本之间的间距,输出为一个tuple元祖,可参照ar3的输出结果加深理解。
(4)创建数组–zeros()/zeros_like()/ones()/ones_like()
zeros()函数即创建元素全是0的数组,ones()函数即创建元素全为1的数组,zeros_like()函数是创建一个与给定数组相同形状相同类型的元素全为0的数组,ones_like()即创建一个与给定数组相同形状相同类型的元素全为1的数组。下面我们来看几个简单的例子:

ar1 = np.zeros(5) #创建具有5个元素的行数组 ar2 = np.zeros((2,2), dtype = np.int)#创建2*2的二维数组,将元素类型改为int型 print(ar1,ar1.dtype) print(ar2,ar2.dtype) print('------') # numpy.zeros(shape, dtype=float, order='C'):返回给定形状和类型的新数组,用零填充。 # shape:数组纬度,二维以上需要用(),且输入参数为整数 # dtype:数据类型,默认numpy.float64 # order:是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。 ar3 = np.array([list(range(5)),list(range(5,10))]) ar4 = np.zeros_like(ar3) print(ar3) print(ar4) print('------') # 返回具有与给定数组相同的形状和类型的零数组,这里ar4根据ar3的形状和dtype创建一个全0的数组 ar5 = np.ones(9) ar6 = np.ones((2,3,4)) ar7 = np.ones_like(ar3) print(ar5) print(ar6) print(ar7) # ones()/ones_like()和zeros()/zeros_like()一样,只是填充为1

输出结果:
在这里插入图片描述
(5)创建数组–eye()
看到eye应该就觉得很熟悉了,即创建对角数组,对角线上的元素为1,其余元素为0,如:

print(np.eye(5)) # 创建一个正方的N*N的单位矩阵,对角线值为1,其余为0

输出结果:
在这里插入图片描述
最后来给大家补充一下ndarray的数据类型:
(1)bool 用一个字节存储的布尔类型(True或False)
(2)inti 由所在平台决定其大小的整数(一般为int32或int64)
(3)int8 一个字节大小,-128 至 127
(4)int16 整数,-32768 至 32767
(5)int32 整数,-2 ** 31 至 2 ** 32 -1
(6)int64 整数,-2 ** 63 至 2 ** 63 - 1
(7)uint8 无符号整数,0 至 255
(8)uint16 无符号整数,0 至 65535
(9)uint32 无符号整数,0 至 2 ** 32 - 1
(10)uint64 无符号整数,0 至 2 ** 64 - 1
(11)float16 半精度浮点数:16位,正负号1位,指数5位,精度10位
(12)float32 单精度浮点数:32位,正负号1位,指数8位,精度23位
(13)float64或float 双精度浮点数:64位,正负号1位,指数11位,精度52位
(14)complex64 复数,分别用两个32位浮点数表示实部和虚部
(15)complex128或complex 复数,分别用两个64位浮点数表示实部和虚部
其实常用的也就那么几种啦,大家看一下就好~

今天的分享就到这里啦,有问题的话可以私聊我哦,看到都会回的,没回就是在写作业啦~

本人是一位211高校在读的本科生,对数据分析比较感兴趣,去年拿到了数学建模国家一等奖,今年参加了美赛还没结果,参加比赛选的题型都是大数据型,用过Excel,Spss,Lingo,MATLAB做数据分析,现在觉得Python比较高效,做数据可视化也非常方便,每天都在坚持学习,对Python数据分析和数据可视化有兴趣的可以关注我哦,每天都会更新的,跟我一起进步呀


作者:多欢喜 



NumPy python数据分析 科学计算 科学 数据结构 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号