#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
矩阵运算的函数集合,包括
(1)实例初始化:
mat(A),会得到矩阵的行和列,内部保存传进来的mat,对其进行操作,会自动判断A的数据类型
(2)运算符:
矩阵加减法:+、-(支持连加连减)
矩阵对应元素乘法:*(支持连乘)
打印:形式为'shape:(row,col),data:矩阵列表'
(3)属性方法:
矩阵转置:调用方式:mat(A).T
非奇异矩阵的逆::mat(A).I
非奇异矩阵的行列式值:mat(A).det
非奇异矩阵的三角分解:LU(matrix, isPart=False),isPart为真时返回一个L,U上下三角矩阵组成的元组,为False返回LU组成的一个矩阵
矩阵的迹:mat.tr
(3)静态方法:
生成单位矩阵:ones
矩阵乘常数:dotk(k, mat),注意第一个参数要是常数
矩阵向量1范数:norm_1
矩阵向量无穷范数:norm_inf
# TODO
初等行变换:(未完成)
(4)类成员函数(protected):
第一个非零数归一化:
向量和:_vecAdd
向量减:_vecSub
# :TODO矩阵乘法:dot(支持多参数连乘,但要注意数据类型)
矩阵交换行:swap
gzha:
date: 2018.04.07
矩阵换行:exchange_hang
矩阵绝对值最大的元素:absmax_mat
选主元特用的:absmaxsp_mat
高斯消去法求逆:mat_gaosi
矩阵的定义:此处矩阵的定义
矩阵都是由一个二维列表表示的即[[]]的形式,具体例子如[[1,12],[2,1],[0,2],[1,3]],
此为4*2的矩阵,4为行,2为列,推荐用len(mat)表示的是行数,len(mat[0])用来表示列数
'''
__author__ = 'Sei Gao'
# date = 2018.03.30
import copy
import math
import time
import random as rd
import numpy as np
#sys.setrecursionlimit(150) # set the maximum depth as 1500
class mat:
# region 运算符逻辑
def __init__(self, matrix):
if isinstance(matrix, list):
self.row = len(matrix)
self.col = len(matrix[0])
self.shape = (self.row, self.col)
self.mat = matrix
elif isinstance(matrix, mat):
self.row = len(matrix.mat)
self.col = len(matrix.mat[0])
self.shape = (self.row, self.col)
self.mat = matrix.mat
else:
raise TypeError("矩阵基础类型必须为列表或mat类")
def __str__(self):
return "shape:" + str(self.shape) + ",data:" + str(self.mat)
def __iter__(self):
'''迭代器,可以直接对mat类型数据操作'''
cursor = 0
while cursor < self.row:
yield self.mat[cursor]
cursor += 1
# TODO:连加矩阵未追加判断
def __add__(self, other, *mat_else):
if not isinstance(other, mat):
raise TypeError("数据类型不一致")
# 判断矩阵规格是否一致
if self.shape != other.shape:
assert "用你脑子想想,矩阵维度不一样能加么?"
ret_mat = [None] * self.row
for i in range(len(ret_mat)):
ret_mat[i] = [0] * self.col
for i in range(self.row):
for j in range(self.col):
ret_mat[i][j] = self.mat[i][j] + other.mat[i][j]
for k in range(len(mat_else)):
ret_mat[i][j] += mat_else[k][i][j]
return mat(ret_mat)
def __sub__(self, other, *mat_else):
if not isinstance(other, mat):
raise TypeError("数据类型不一致")
# 判断矩阵规格是否一致
if self.shape != other.shape:
assert "用你脑子想想,矩阵维度不一样能减么?"
ret_mat = [None] * self.row
for i in range(len(ret_mat)):
ret_mat[i] = [0] * self.col
for i in range(self.row):
for j in range(self.col):
ret_mat[i][j] = self.mat[i][j] - other.mat[i][j]
for k in range(len(mat_else)):
ret_mat[i][j] -= mat_else[k][i][j]
return mat(ret_mat)
# 注意啦,这个是对应元素相乘,不是矩阵点乘!
def __mul__(self, other, *mat_else):
ret_mat = [None] * self.row
for i in range(len(ret_mat)):
ret_mat[i] = [0] * self.col
if isinstance(other, mat):
# 判断矩阵规格是否一致
if self.shape != other.shape:
assert "用你脑子想想,矩阵维度不一样能乘么?"
for i in range(self.row):
for j in range(self.col):
ret_mat[i][j] = self.mat[i][j] * other.mat[i][j]
for k in range(len(mat_else)):
ret_mat[i][j] *= mat_else[k][i][j]
return mat(ret_mat)
# endregion
# region 属性方法
# 转置操作(这样调用:mat(a).T)
@property
def T(self):
# # 初始化矩阵
# ret_mat = [None] * self.col
# for i in range(len(ret_mat)):
# ret_mat[i] = [0] * self.row
# # 元素转置
# for i in range(self.col):
# for j in range(self.row):
# ret_mat[i][j] = self.mat[j][i]
# return mat(ret_mat)
return mat(map(list, zip(*self.mat)))
# 求行列式操作(这样调用:mat(a).det)
@property
def det(self):
'''
矩阵求行列式的值:建议采用以下的形式调用此函数 mat.det
return:
行列式的值
'''
det = 1
LU = copy.deepcopy(mat.LU(self.mat, False))
for i in range(self.row):
det *= LU.mat[i][i]
return det
# region 求逆操作
@property
def I(self):
'''
利用三角分解求解矩阵的逆
:return: 矩阵的逆
'''
matrix = copy.deepcopy(self.mat)
L, U = mat.LU(matrix, True)
n = len(L)
# LU逆矩阵初始化
L_I = [None] * n
U_I = [None] * n
for i in range(n):
L_I[i] = [0] * n
U_I[i] = [0] * n
for i in range(n):
L_I[i][i] = 1
if U[i][i] == 0:
raise Exception("奇异矩阵警告,吔我大便玉啦!")
U_I[i][i] = 1.0 / U[i][i]
# L矩阵求逆
for j in range(n - 1):
for i in range(j + 1, n):
qiuhe = 0
for k in range(j + 1, i):
qiuhe = qiuhe + L[i][k] * L_I[k][j]
L_I[i][j] = -L[i][j] - qiuhe
# U矩阵求逆
for j in range(n - 1, 0, -1):
for i in range(j - 1, -1, -1):
qiuhe = 0
for k in range(j, i, -1):
qiuhe = qiuhe + U[i][k] * U_I[k][j]
U_I[i][j] = -float(qiuhe) / U[i][i]
return dot(U_I, L_I)
# endregion
# TODO:并不是赫米特标准型
@property
def hermite(self, isdet=False):
'''
求矩阵的Hermite标准型
:return: 返回mat类的倒三角矩阵
:param isdet: bool型数据,若为true则不进行对角归一,可以用于求行列式值
'''
ret_mat = self.mat
if isdet:
ret_mat[0] = self.mat[0]
for i in range(1, self.row):
main_row = ret_mat[i - 1]
for j in range(i, self.row):
temp_row = ret_mat[j]
k = float(main_row[i - 1]) / temp_row[i - 1]
temp_row = self._vecSub(temp_row, self._vecMul_k(main_row, k))
ret_mat[j] = temp_row
else:
ret_mat[0] = self._vecPro(self.mat[0])
for i in range(1, self.row):
main_row = ret_mat[i - 1]
for j in range(i, self.row):
temp_row
没有合适的资源?快使用搜索试试~ 我知道了~
造轮子的练习,效率堪忧,不使用第三方库来建立机器学习的python练习,偶尔使用第三方库进行测试(如可视化).zip
共31个文件
py:12个
xml:9个
pyc:6个
需积分: 5 0 下载量 167 浏览量
2024-04-18
12:40:09
上传
评论
收藏 47KB ZIP 举报
温馨提示
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,从而不断改善自身的性能。机器学习是人工智能的核心,也是使计算机具有智能的根本途径。 应用: 机器学习在各个领域都有广泛的应用。在医疗保健领域,它可用于医疗影像识别、疾病预测、个性化治疗等方面。在金融领域,机器学习可用于风控、信用评分、欺诈检测以及股票预测。此外,在零售和电子商务、智能交通、生产制造等领域,机器学习也发挥着重要作用,如商品推荐、需求预测、交通流量预测、质量控制等。 优点: 机器学习模型能够处理大量数据,并在相对短的时间内产生可行且效果良好的结果。 它能够同时处理标称型和数值型数据,并可以处理具有缺失属性的样本。 机器学习算法如决策树,易于理解和解释,可以可视化分析,容易提取出规则。 一些机器学习模型,如随机森林或提升树,可以有效地解决过拟合问题。 缺点: 机器学习模型在处理某些特定问题时可能会出现过拟合或欠拟合的情况,导致预测结果不准确。 对于某些复杂的非线性问题,单一的机器学习算法可能难以有效地进行建模和预测。 机器学习模型的训练通常需要大量的数据和计算资源,这可能会增加实施成本和时间。 总的来说,机器学习虽然具有许多优点和应用领域,但也存在一些挑战和限制。在实际应用中,需要根据具体问题和需求选择合适的机器学习算法和模型,并进行适当的优化和调整。
资源推荐
资源详情
资源评论
收起资源包目录
造轮子的练习,效率堪忧,不使用第三方库来建立机器学习的python练习,偶尔使用第三方库进行测试(如可视化).zip (31个子文件)
content
PreProcess.py 2KB
weights
bpwi.csv 950B
bpwo.csv 129B
BpWeightsInfo.json 1KB
BaseModel.py 2KB
DataStructure
BaseBag.py 627B
optimize.py 4KB
profiler.py 4KB
LinkedStructure.py 6KB
Classification.py 11KB
.idea
MyPythonPackage.iml 576B
testrunner.xml 248B
scopes
scope_settings.xml 139B
other.xml 187B
libraries
R_User_Library.xml 123B
vcs.xml 180B
workspace.xml 42KB
misc.xml 288B
modules.xml 284B
encodings.xml 166B
BaseModel.pyc 2KB
BaseCode
__init__.py 0B
matrix.pyc 18KB
figure.py 445B
figure.pyc 808B
Function.py 1KB
matrix.py 23KB
__init__.pyc 145B
Function.pyc 1KB
__pycache__
matrix.cpython-36.pyc 13KB
Regression.py 9KB
共 31 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3917
- 资源: 7441
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 1_11月25日 16点06分.m4a..mp3
- Python基础教程(crossin全60课)
- Xbox GameBar 覆盖 GUI.zip
- html编写告白爱心树(超浪漫!)
- Python OpenCV从入门到精通
- 一款Python动物机器人桌面控制系统源码.zip
- X-Ray Engine 的改进版本,这是 GSC Game World 在举世闻名的 STALKER 游戏系列中使用的游戏引擎 加入 OpenXRay!;).zip
- 基于微信小程序的校园二手交易平台小程序项目源码(高分期末大作业)
- MyBatisPlus实战:无感更新时间字段
- 工业自动化控制领域的西门子S7-1200 PLC参数详细解析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功