家政网站模板下载,诀窍的网站,做搜狗pc网站优化点,厦门seo关键词优化运营利用python做数据处理和分析过程中#xff0c;如在开展机器学习的数据预处理、数据格式转换等等#xff0c;不可避免的会涉及到各种矩阵变换#xff0c;其中使用最多的就是numpy下的矩阵变换#xff0c;以下是日常用到的一些矩阵变换总结#xff0c;主要有矩阵中数据类型的… 利用python做数据处理和分析过程中如在开展机器学习的数据预处理、数据格式转换等等不可避免的会涉及到各种矩阵变换其中使用最多的就是numpy下的矩阵变换以下是日常用到的一些矩阵变换总结主要有矩阵中数据类型的整体转换、矩阵维度增减、多矩阵拼接、矩阵切片获取和多矩阵迭代等等当然pandas也有相应的矩阵变换操作相对更复杂后续会逐步发出来供参考。
1.转换元素类型和增加维度
import numpy as np
data_prenp.random.randint(2,10,size[5,3]) #生成一个5*3的二维整形矩阵数据范围在2~10之间
data_pre np.array(data_pre, dtypenp.float32) #数据转换为float
targetnp.random.random(10) #随机生成一个一维矩阵10个数
target np.array(target, dtypenp.float32).reshape(-1, 1) #数据转换为多行1列数据相当于增加维度float型可以不用的。
data_pre np.arange(0.0, 5.0, 0.1)[:, np.newaxis] #np.arange会生成一个一维矩阵希望data_pre是一个二维矩阵用np.newaxis相当于给数据增加一个维度
targetnp.random.random(10) #随机生成一个一维矩阵10个数
targettarget.reshape(-1, 1) #实现行转换为列转换前y_raw为100个数的一维矩阵转换后y_raw为100*1的二维矩阵
2.拉平或降低维度
rng np.random.RandomState(42) #获得随机数生成器使得每次得到的随机数系列相同
X np.sort(5 * rng.rand(100, 1), axis0) #获的100个0到5的随机数给X,X.shape(100,1)二维
y np.sin(X).ravel() #矩阵多维度拉成一维矩阵,ravel() 返回的是视图,影响原始矩阵yflatten() 返回的是拷贝。y.shape(100,)
import cv2
img_data cv2.imread(data/lena.jpg, cv2.IMREAD_COLOR) #利用opencv读取图片
img_data img_data.reshape((-1, 3)) #将三维转换为二维相当于高度和宽度相乘合并,最后一维不变3列转换前img_data225*225*3转换后50625*3
#整体维度不变实现第一个维度行数调整相当于根据labels找到centers[labels]生成新的new_colors数据按照labels行数增加如centers16*3labels50625*3转换后的new_colors为50625*3
# new_colors centers[labels].reshape((-1, 3))
3.拼接矩阵
X_posnp.random.randn(5,3) #随机生成一个10*3的二维矩阵
X_negnp.random.randn(5,3) #随机生成一个10*3的二维矩阵
# 行拼接
#方式1二维矩阵列数不变行数顺序追加相当于行顺序拼接两个矩阵的列数必须相同
X np.concatenate((X_pos, X_neg))
#方式2二维矩阵列数不变行数顺序追加相当于行顺序拼接两个矩阵的列数必须相同
X2np.r_[X_pos,X_neg]
# 列拼接
#二维矩阵行数不变列数顺序追加相当于列顺序拼接两个矩阵的行数必须相同
X1np.c_[X_pos,X_neg]
y_posnp.random.random(3) #随机生成一个一维矩阵3个数
y_negnp.random.random(5) #随机生成一个一维矩阵5个数
#一维矩阵行数不变列数顺序追加相当于列顺序拼接
y np.concatenate((y_pos, y_neg))
4.获取矩阵片段
int_listnp.random.randn(10,5) #随机生成一个10*5的二维矩阵
#list获取切片
#int_list[start:stop:step]参数分别为开始结束和步长
print(int_list)
#对于一维矩阵获取第1维度的第024...步长为2的数据
#对于二维矩阵获取第2维度的第0~10列并指定获取第一维度的步长为2获取的行数stop/step如下示例时5行数据
print(int_list[0:10:2])
print(int_list[0:5,:4]) #获取第1维度的第0~5行第2维度的前4列数据
#对于三维矩阵
arr_float_3d np.ones((3, 5, 4))
print(arr_float_3d)
#多维list获取第一通道数据
xarr_float_3d[0, :, :]
#多维list获取第一通道0~3行数据第3列到结束的数据
xarr_float_3d[0, :3, 3:]
5.zip内建函数
zip(*iterables)是内建函数
传入参数元组、列表、字典等迭代器。
返回参数一个元组迭代器,将可迭代的对象作为参数将对象中对应的元素打包成一个个元组然后返回由这些元组组成的列表。主要用于遍历元组。
如果各个迭代器的元素个数不一致则返回列表长度与最短的对象相同利用 * 号操作符可以将元组解压为列表。
X1np.random.random(5) #随机生成一个一维矩阵5个数
Y1np.random.randn(5).astype(np.int32) #随机生成一个一维矩阵5个数转换为整数
Z1np.array([True, False, True, True, False]) #列表bool值
zzzip(X1,Y1,Z1)
result [(a,b,c) for a,b,c in zip(X1,Y1,Z1)]
print(result)
x,y,zzip(*zz) #元组转换为列表
print(list(x))
zzzip() #没有参数时返回的是空列表