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)
还没有任何评论哟~
