Advertisement

NumPy简介及使用

阅读量:

NumPy

1.NumPy的优势

NumPy是一个开源Python科学计算库,用于快速处理任意维度的数组。
对于同样的数值计算任务,使用NumPy比直接使用Python要简洁、快速。

NumPy中的数组的存储效率和输入输出性能远优于Python中等价的基本数据结构,
其能提升的性能与数组中的元素成正比。
NumPy大部分代码使用C语言写的,在底层算法在设计时就有优异的性能,
这使得NumPy比纯Python代码高效得多。

2.NumPy的Ndarray对象

NumPy最重要的一个特点是N维数组对象ndarray。它是一系列同类型数据的集合。
以0下标为开始进行索引,ndarray对象用于存放同类型元素的多维数组。

创建数组

复制代码
    创建一维数组
    import numpy as np
    
    #传入已有数组,并使用np.array将其转化为ndarray。
    list1=[1,2,3,4]
    oneArray=np.array(list1)
    t1=np.array([1,2,3])
    #使用range生成序列
    t2=np.array(range(10))
    
    **#使用numpy自带的arange**
    t3=np.arange(0,10,2)	#[0,2,4,6,8]
    
    创建二维数组
    import numpy as np
    list2=[[1,2],[3,4],[5,6]]
    twoArray=np.array(list2)

常用属性

复制代码
    #ndim数组的维度
    print(twoArray.ndim)
    
    #数组的形状(行,列)
    print(twoArray.shape)
    
    #数组的元素个数
    print(twoArray.size)

调整数组的形状

复制代码
    four=np.array([[1,2,3],[4,5,6]])
    #更改数组形状,返回一个数组,可以改变维数
    four=four.reshape(3,2)
    
    #将多维变为一维,order默认为‘C’以行为主展开,'F'以列展开
    five=four.reshape((6,),order='F')
    
    #将数组转成list
    a=np.array([4,35,6,26,7])
    list_a=a.tolist()

NumPy的数据类型

复制代码
    a=np.array([4,35,6,26,7],dtype=np.int16)
    #获取数组中每个元素的字节单位长度
    print(a.itemsize)
    #获取数据类型
    print(a,dtype)
    #调整数据类型
    f1=f.astype(np.int64)

3.数组的计算

数组的运算是对数组所有元素进行操作
不同形状的多维数组不能计算
行数或列数相同的一维数组和多维数组可以计算
行形状相同会与每一行数组对应位操作,列形状相同同理。

4.数组的轴、索引

一般列方向位0轴,行方向位1轴。

复制代码
    import numpy as np
    a=np.arange(6).reshape(2,3)	#[[1,2,3],[4,5,6]]
    print(np.sum(a,axis=0))	#[5,7,9]	axis=0列求和、axis=1行求和,sum不指定轴为全部的和

索引

复制代码
    #一维数组索引与列表相同
    #多维数组
    t1=np.arange(24).reshape(4,6)
    #取第二行,**索引从0开始**
    print(t1[1])或print(t1[1,:])
    #从第二行开始所有行
    print(t1[1:])或print(t1[1:,:])
    
    #取不连续的行
    print([0,2,3])或print([0,2,3],:)
    #取整列前面行应为':',取不连续的值
    print(t1([0,1,1],[0,1,3]))

数组的数值修改

复制代码
    #以赋值的形式修改,**可以根据条件修改**
    t[t<10]=0
    #使用逻辑判断,与或非&,|,~。
    #三目运算np.where(condition,x,y)满足条件输出x,不满足输出y。

5.数组的添加、删除、去重、拼接和分割

添加

复制代码
    #numy,append在末尾追加,维度必须匹配。
    a=n.arange(6).reshape(2,3)
    print(np.append(a,[7,8,9],axis=0))		#默认axis=0,
    print(np.append(a,[1,1,1],[2,2,2],axis=1))		#沿轴1添加
    
    #numpy.insert,给定索引插入,若为给定axis,则插入前数组被展开成一维
    a=np.arange(6).reshape(2,3)
    print(np.insert(a,3,[11,12]))
    print(np.insert(a,1,[11],axie=0))	#在第一行添加,有广播机制,所以第一行全部被添加11
    print(np.insert(a,1,11,axis=1))		#在第一列全部添加11

删除
delete,若为给定axis,则插入前数组被展开成一维。其他用法同insert

去重

复制代码
    #unique去重,包含return_index,return_inverse,return_counts三个属性,
    分别为新列表在旧列表的位置,旧列表在新列表的位置,去重数组中元素在旧列表出现的次数
    a=np.array([1,2,1,3,5,6,5,7])
    u=np.unique(a)

拼接

复制代码
    #concatenate直接拼接,stack垂直拼接(加维度)
    a=np.arange(6).reshape(2,3)
    b=np.arange(6).reshape(2,3)
    print(np.concatenate((a,b),axis=0)

分割

使用split,hsplit,vsplit

6.numpy的计算

复制代码
    a=np.arange(6).reshape(2,3)
    b=np.max(a)
    c=np.min(a,axis=1)
    #还有maximum,munimum,mean、argmin
    #cumsum(返回给定轴上的和)
    print(a.cumsum(0))		#返回一行,所有列求和

7.数组中的nan和inf

复制代码
    创建一个nan和inf,只有float能赋值nan
    a=np.nan
    b=np.inf
    t=np.arange(24,dtype=float).reshape(4,6)
    #判断非零的个数
    print(np.count_nonzero(t))
    np[3,4]=np.nan	#返回布尔值
    #**nan不等于本身,nan和任何数计算都结果为nan**,所以可以结合两个方法判断nan的个数
    print(np.count_nonzero(t!=t))

全部评论 (0)

还没有任何评论哟~