numpy
数组
Ndarray对象
是N维数组对象,是一系列同类型数据的集合,以0为下标开始进行集合中元素的索引。
Ndarray对象:用于存放同类型元素的多维数组。
import numoy as np
1. 创造一维数组
# 直接传入列表
list1=[1,2,3,4]
array1=np.array(list1)
#传入range生成序列
a2 = np.array(range(10))
# 使用numpy自带的np.arange()生成数组
a3 = np.arange(0,10,2)    #和range一样
2. 创造二维数
list2 = [[1,2],[3,4],[5,6]]
array2 = np.array(list2)
3. 常用属性
# 维度
array.ndim()
# 形状,几行几列
array.shape
# 元素个数,所有元素
array.size()
4. 修改数组的形状
array3 = np.array([[1,2,3],[4,5,6]])
array3.shape = (3,2)       #是直改变原有数组
>>> ([1,2],[3,4],[5,6])
array3_new = array3.reshape(3,2)  #生成新的数组。原有数组不改变
# 将多维数组改为一维数组
array4 = array3.reshape((6,),order = 'F' )
# 默认情况,'C'一行为主的顺序展开。'F'以列的顺序展开
array5 = array3.falatten( order = 'C')
5. 将数组转换成list
array6 = np.array([1,2,3,4])
list6 = array.tolist()
6. numpy的数据的类型
f = np.array([1,2,3,4],dtype = np.int16)  # dtype规定元素类型
f.itemsize  #获取元素类型
f.astype   # 调整元素类型
# 随机生成小数,可设定小数位置
round(random.random(),2)  
arr = np.array([random.random() for i in range(10)])
np.round(arr,2)
7. 数组的索引和切片
#冒号分隔切片参数 start:stop:step 来进行切片
#一维数组
arr[2:7:2]
#二维数组
t1 = np.arange(24).reshape(4,6)
# 取一行
t1[1]
t1[1,:]
#取连续的多行
t1[1:]
t1[1:3,:]  #取左不取右
# 取不连续的多行
t1[[0,2,3]]
t1[[0,2,3],:]
# 取一列
t1[:,1]
# 取连续的多列
t1[:,1:]
# 取连续的多列
t1[:,[0,2,3]]
# 取某一个值
t1[2,3]
# 取多个不连续的值[[行。行。。。],[列,列。。。]]
t1[[0,1,1][2,3,4]]
8.  数组中的数值修改
 t[1,2] = 0
 # 可以根据条件修改,逻辑运算符适用
数组中的轴
可以理解为方向
高纬度的为0轴,低纬度的为1轴
a = np.array([1,2,3],[4,5,6])
np.sum(a)   #所有元素和
np.sum(a,axis = 0)  # 会降维
数组的计算
array 与数字进行计算,每一个元素都进行相应的计算
同种形状的数组,对应位置进行计算操作;形状不一样,不能进行计算。除非
array与有相同一行(列)的array进行计算,对每一行(列)进行计算
| 函数 | 函数说明 | 
|---|---|
| numpy.max() | 最大值 | 
| numpy.min() | 最小值 | 
| numpy.maximum | 数据比较,返回由最大的元素组成的数组 | 
| numpy.minimum | 数据比较,返回由最小的元素组成的数组 | 
| numpy.mean() | 平均值 | 
| numpy.argmin() | 最小值索引 | 
| numpy.std() | 标准差 | 
| numpy.ptp() | 极差 | 
| numpy.sqrt() | 平方根 | 
| arr.cumsum(a) | 返回给定axis a上的累计和 | 
数组操作
1. 数组的添加
numpy.append(arr,[1,2,3])    # 在数组末尾添加,会变成一维数组
numpy.append(arr,[1,2,3],axis = 0)  #沿0轴添加,列数要相同
numpy.insert    # 在给定索引之前插入
numpy.insert (arr,3,[1,2])   #先展开一维数组,再到相应的位置插入,输出一维数组
numpy.insert (arr,3,[1,2],axis = 0) # 沿0轴广播
2. 数组中的删除
numpy.delete  # 返回删除指定子数组的新数组
numpy.delete(a,5)  # 未传递axis参数,在删除之前数组会被展开,输出一维数组
numpy.delete(a,1,axis = 1)  #删除每一行中的第二列
3. 数组去重
numpy.unique  # 去除数组中的重复元素,如果不是一维数组会先展开,输出一维数组会进行重排列
u,indices = np.unique(a,return_index =True)
# return_index: True,返回新列表元素在旧列表中的索引,并以列表形式储存
u,indices = np.unique(a,return_inverse =True)
# return_inverse : True,返回旧列表元素在新列表中的索引,并以列表形式储存
u,indices = np.unique(a,return_counts =True)
# return_counts:True,返回去重数组中的元素在原数组中出现的次数
4. 数组的拼接
# 轴连接。
numpy.concatenate()  # 纵向连接,列数相同;横向连接,行数相同,维度不增加
numpy.concatenate((a,b),axis = 0) 
# 堆叠
numpy.stack()    #维度会增加
numpy.stack((a,b),axis = 0)
numpy.vatack((a,b))   # 矩阵垂直拼接,维度不增加
numpy.hstack()   # 矩阵水平拼接
5. 数组的分割
numpy.split(arr,n)  # 将一个数组分割为n个子数组,分割的子数组维度不改变
# 如果indices_or_sections 是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
# axis:沿着哪个方向进行切向,默认为0,横向切分,为1 时,纵向切分
numpy.hsplit   # 沿水平轴分割
numpy.vsplit   # 沿垂直轴分给
数组中的nan和inf
nan: 缺失数据。nan和任何数计算都为nan
inf: 无穷大
# 创建一个nan和inf
a = np.nan
b = np.inf
np.nan == np.nan
>>> False  # 两个空值不相等
t = np.arange(24,dtype = float).rashape(4,6)  # float类型的数据才能赋值nan
np.count_nonzero(t)   # 非零的个数
t[3,4] = np.nan
np.count_nonzero(t != t)  # 判断nan的个数
# 将nan替换为0
t[np.isnan(t)] = 0  
# 将nan替换为平均值
for  i in range(t.shape[1]):   #遍历每一列
    temp_col = t[:i]           # 获取当前列数据
    nan_num = np.count_nonzero(temp_col != temp_col)    # 判断当前列是否含有nan
    if nan_num != 0:
        temp_col_not_nan = temp_col[temp_col == temp_col]   #这一列不为nan的数据
        temp_col[np.isnan(temp_col)] = np.mean(temp_col_not_nan)
二维数组的转置
np.transpose(a)  #数组转置
a.T    # 转置
 b = t.swapaxes(1,0)   #调换两个轴达到转置
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号