numpy 数组

np 的切片是形成视图, 切片内容修改 ,原型也会修改

arr[a:b].copy()  是复制

查看数组的形状: a.shape()

修改数组的形状: a. reshape()

降低数组的维度为一维: a.flatten()

查看数组的行    a.ndim()

data[~(names == 'Bob')]   ~ 反条件

数组的加减乘除 遵循广播原则

对二维:  行为0 ,列为1    对于三维, 深度为0 ,行为1, 列为2

数组的转置: t.swapaxes(1,0)   t.transpose()  t.T

numpy 读取数据 :np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

fname:文件,字符串或产生器,可以是.gz或bz2压缩文件delimier 分割字符串,默认为空格,改为逗号   skiprows 跳过前X行 

usecols 读取指定的列,索引,元组类型

unpack 表示转置 如果True 读入属性将分别写入不同数组变量, False, 读入数据值值写入一个数组变量,默认false

numpy  三元运算   np.where(t<10, 0 ,10)

inf (-inf, inf): infinity ,inf 表示正无穷,加符号的表示负无穷

两个nan是不相等的, np.nan !=np.nan

判断组中nan的个数: np.count_nonzero(t !=t)   

将nan值替换掉   t[np.isnan(t)] = 0

矩阵乘法:   np.dot(x,x.T)

np.meshgrid函数接受两个一维数组,并产生两个二维矩阵

a.cumsum() 是累加函数

a.any()  是否有True

a.all() 是否都是True

a.in1d(a,b) 检测元素a 是否在b中

np.save(文件名,数组)   将数组储存进磁盘

np.savez()  可以将多个数组保存到一个未压缩文件中

np.laod()  读取

np.savez_compressed()   如果要压缩

 
# numpy 帮助处理数值型数据
import random
import numpy as np
#使用numpy 生成数组
a = np.array([1,2,3])
print(type(a))  #<class 'numpy.ndarray'>
b = np.array(range(10))
c = np.arange(4,10,2)  #[4,10) 步长为2
print(c)
print(c.dtype)  # int64 numpy 对数组的固有类型
# numpy 中的数据类型
t4 = np.array(range(0,12),dtype='int8')
# numpy 中的bool 类型
t5 = np.array([11,0,1,0,10,10,10,0,0,0,1],dtype=bool)
# 修改数据类型
t6 = t5.astype('int64')
#%%
# numpy 中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
t8 = np.round(t7,2)  # 保留小数值
print(t8)
z = "%.2f"%random.random()
print(z)

#%%-------------
#数组的形状
print(t4.shape)
t2 = np.array([[1,2,3],[4,5,6]])
print(t2.shape)
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])  # 3维
print(t3.shape)

#修改数组的形状
print(t4)
t14 = t4.reshape((3,4))  # 转变为三行四列
print(t14)
#%%
t5 = np.arange(24).reshape((2,3,4))  # 两块,每块三行,每行4列
print(t5)


#降维
t6 = t5.reshape((24,1)) #(24,)和(24,1)是不一样的
print(t6)
t6= t5.flatten()
print(t6) #转换成1维
#%%
#数组的计算
t5=t5.reshape(4,6)
print(t5*2)
t6=np.arange(100,124).reshape(4,6)
print(t6)
print(t5+t6)  #对应位置进行计算

t7 = np.arange(0,6)
print(t5-t7)  # 没行都减t7
t8 = np.arange(0,4).reshape(4,1)
print(t5-t8)


#%%
#轴 axis = 0 行 1 列     三维 :0 块 1行 2列
# numpy 读取数据
# np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
#  fname:文件,字符串或产生器,可以是.gz或bz2压缩文件
#  delimier  分割字符串,默认为空格,改为逗号
# skiprows 跳过前X行
# usecols 读取指定的列,索引,元组类型
# unpack 表示转置 如果True 读入属性将分别写入不同数组变量, False, 读入数据值值写入一个数组变量,默认false
   

数组的拼接:

#%% 数组的拼接

#竖直拼接  np.vstack((t1,t2))
t1 = np.arange(12).reshape(2,6)
t2 = np.arange(12,24).reshape(2,6)
t3 = np.vstack((t1,t2))

#%% 水平分割 np.hstack((t1,t2))
t4 = np.hstack((t1,t2))

数组的行列交换:

#%% 数组的行列交换
t3[[1,2],:] = t3[[2,1],:]  # 第二行与第三行换了下位置
t4[:,[0,2]] = t4[:,[2,0]]  # 0-2 列倒了下位置

判断是否为nan

#%% 判断是否为nan
print(np.isnan(t2))

创建正方形数组:

#%% 创造一个对角线为1 的正方形数组
t5 = np.eye(3)
#获取最大值,最小值的位置
print(np.argmax(t5,axis = 0))  #[0 1 2] 第一个为0 ,第二个位1, 第三行的为2
print(np.argmin(t5,axis = 1))

创造一个全为0 或全为1 的数组

#%% np.zeros() 创造一个全0 的数组
zero_data = np.zeros((3,1)).astype(int)
ones_data = np.ones((5,1)).astype(int)

将数组里的nan替换为平均值

def fill_ndarray(x1):  # 函数不太懂, 没有赋值 怎么就理所当然的替代掉了
    for i in range(x1.shape[1]):  #i 为列的索引号
        temp_col = x1[:,i]  # 当前的一列
        nan_num = np.count_nonzero(temp_col!=temp_col)
        if nan_num !=0:
            temp_not_nan_col = temp_col[temp_col == temp_col]
            # 选中当前为nan的位置,吧值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)]= temp_not_nan_col.mean()  # 将为nan的数据用平均值替代带哦
    return x1

if __name__ == '__main__':
    x1 = np.arange(12).reshape(3,4).astype('float')
    x1[1,2:] = np.nan  # 第一行的第二列往后全为none
    print(x1)
    x1 = fill_ndarray(x1)
    print(x1)

 

 numpy 切片

可以进行布尔索引

#%%
t2 = np.arange(24).reshape(4,6)
# 将t2进行转置
t3 = t2.transpose()
t3 = t2.T
t3 =t2.swapaxes(1,0)

#%%
#numpy 的索引与切片
# 取行
print(t2[2])
print(t2[2,3]) # 取的是第3列第4个
print(t2[[1,3]]) # 取不连续的多行
print(t2[1,:]) # 取第二行
print(t2[2:,:])  # 取第二行以后的所有行
print(t2[[1,3],:]) # 取第一行和第三行
#%% 取列
print(t2[:,2])  # 取了第三列
print(t2[:,[1,3]]) # 取index为1,3的列

#%% 取多行多列
# 第一行到第三行,第2列到第4列
print(t2[0:3,1:4])
# 取多个不相邻的点
print(t2[[2,3],[1,5]])
# 选取出来的结果是 (0,0),(2,1) ,(2,3)
print(t2[[0,2,2],[0,1,3]])

# numpy 的数值修改,  只需要用切片重新赋值即可
t2[t2<10] = 3
# numpy 的三元运算  np.where(t<10,10)
t3 = np.where(t2<=3,100,300)
# numpy 的裁剪  clip (比如吧小于10 的替换成10 大于10 的替换成18)
t4=t2.clip(10,18)

# nan是浮点类型   t2= t2.astype(float)  t2[3,3] = np.nan

Numpy 常用统计函数

求和: t.sum(axis = None)

均值: t.mean(a,axis = None) 受离群点的影响较大

中值:np.median(t,axis = None)

最大值:t.max(axis = None)

最小值:t.min(axis = None)

极值: np.ptp(t, axis = None) 即最大值和最小值之差

标准差: t.std(axis = None)