package org.wlld.MatrixTools;
import java.util.ArrayList;
import java.util.List;
public class MatrixOperation {
private MatrixOperation() {
}
public static Matrix add(Matrix matrix1, Matrix matrix2) throws Exception {//矩阵相加
if (matrix1.getX() == matrix2.getX() && matrix1.getY() == matrix2.getY()) {
Matrix matrix = new Matrix(matrix1.getX(), matrix1.getY());
int x = matrix1.getX();
int y = matrix1.getY();
for (int i = 0; i < x; i++) {//遍历行
for (int j = 0; j < y; j++) {//遍历列
matrix.setNub(i, j, matrix1.getNumber(i, j) + matrix2.getNumber(i, j));
}
}
return matrix;
} else {
throw new Exception("matrix is not equals");
}
}
//矩阵相减
public static Matrix sub(Matrix matrix1, Matrix matrix2) throws Exception {//
if (matrix1.getX() == matrix2.getX() && matrix1.getY() == matrix2.getY()) {
Matrix matrix = new Matrix(matrix1.getX(), matrix1.getY());
int x = matrix1.getX();
int y = matrix1.getY();
for (int i = 0; i < x; i++) {//遍历行
for (int j = 0; j < y; j++) {//遍历列
matrix.setNub(i, j, matrix1.getNumber(i, j) - matrix2.getNumber(i, j));
}
}
return matrix;
} else {
throw new Exception("matrix is not equals");
}
}
//多元线性回归
public static Matrix getLinearRegression(Matrix parameter, Matrix out) throws Exception {
if (parameter.getX() == out.getX() && out.isVector()) {
//将参数矩阵转置
Matrix matrix1 = transPosition(parameter);
//转置的参数矩阵乘以参数矩阵
Matrix matrix2 = mulMatrix(matrix1, parameter);
//求上一步的逆矩阵 这一步需要矩阵非奇异,若出现奇异矩阵,则返回0矩阵,意味失败
Matrix matrix3 = getInverseMatrixs(matrix2);
if (matrix3.getX() == 1 && matrix3.getY() == 1) {
return matrix3;
} else {
//逆矩阵乘以转置矩阵
Matrix matrix4 = mulMatrix(matrix3, matrix1);
//最后乘以输出矩阵,生成权重矩阵并返回
return mulMatrix(matrix4, out);
}
} else {
throw new Exception("invalid regression matrix");
}
}
public static double getEDistByMatrix(Matrix matrix1, Matrix matrix2) throws Exception {
if (matrix1.getX() == matrix2.getX() && matrix1.getY() == matrix2.getY()) {
int x = matrix1.getX();
int y = matrix1.getY();
double sigma = 0;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
double sub = matrix1.getNumber(i, j) - matrix2.getNumber(i, j);
sigma = sigma + Math.pow(sub, 2);
}
}
return sigma / (x * y);
} else {
throw new Exception("two matrixes is not equals");
}
}
//返回两个向量之间的欧氏距离的平方
public static double getEDist(Matrix matrix1, Matrix matrix2) throws Exception {
if (matrix1.isRowVector() && matrix2.isRowVector() && matrix1.getY() == matrix2.getY()) {
Matrix matrix = sub(matrix1, matrix2);
return getNorm(matrix);
} else {
throw new Exception("this matrix is not rowVector or length different");
}
}
public static double errorNub(Matrix matrix, Matrix avgMatrix) throws Exception {//求均方误差
int y = matrix.getY();
if (matrix.isRowVector() && avgMatrix.isRowVector() && y == avgMatrix.getY()) {
double[] subAll = new double[y];
for (int j = 0; j < y; j++) {
double mySelf = matrix.getNumber(0, j);
double avg = avgMatrix.getNumber(0, j);
double sub = Math.pow(avg - mySelf, 2);
subAll[j] = sub;
}
double sigma = 0;
for (int i = 0; i < y; i++) {
sigma = sigma + subAll[i];
}
return sigma / y;
} else {
throw new Exception("this matrix is not rowVector or length different");
}
}
public static Matrix pushVector(Matrix myMatrix, Matrix matrix, boolean addRow) throws Exception {
//向一个矩阵里合并一个行向量或者列向量到矩阵行或者列的末尾
if (matrix.getX() == 1 || matrix.getY() == 1) {
Matrix addMatrix;
if (addRow) {//增加一行
if (matrix.getY() != myMatrix.getY()) {
throw new Exception("this matrix column is not equals");
}
addMatrix = new Matrix(myMatrix.getX() + 1, myMatrix.getY());
} else {//增加一列
if (matrix.getX() != myMatrix.getX()) {
throw new Exception("this matrix row is not equals");
}
addMatrix = new Matrix(myMatrix.getX(), myMatrix.getY() + 1);
}
for (int i = 0; i < addMatrix.getX(); i++) {
for (int j = 0; j < addMatrix.getY(); j++) {
if (addRow) {
if (i == addMatrix.getX() - 1) {//最后一行
addMatrix.setNub(i, j, matrix.getNumber(0, j));
} else {
addMatrix.setNub(i, j, myMatrix.getNumber(i, j));
}
} else {
if (j == addMatrix.getY() - 1) {//最后一列
addMatrix.setNub(i, j, matrix.getNumber(i, 0));
} else {
addMatrix.setNub(i, j, myMatrix.getNumber(i, j));
}
}
}
}
return addMatrix;
} else {
throw new Exception("this matrix is not a vector");
}
}
public static Matrix push(Matrix matrix, double nub, boolean isRow) throws Exception {//向一个向量里PUSH一个值
if (matrix.getX() == 1 || matrix.getY() == 1) {
Matrix myMatrix;
int nubs;
if (isRow) {//行向量
nubs = matrix.getY() + 1;
myMatrix = new Matrix(1, nubs);
} else {//列向量
nubs = matrix.getX() + 1;
myMatrix = new Matrix(nubs, 1);
}
for (int i = 0; i < nubs; i++) {
if (i == nubs - 1) {
if (isRow) {
myMatrix.setNub(0, i, nub);
} else {
myMatrix.setNub(i, 0, nub);
}
} else {
if (isRow) {//行向量
myMatrix.setNub(0, i, matrix.getNumber(0, i));
} else {//列向量
myMatrix.setNub(i, 0, matrix.getNumber(i, 0));
}
}
}
return myMatrix;
} else {
throw new Exception("this matrix is not a vector");
}
}
public static Matrix getPoolVector(Matrix matrix) throws Exception {
if (matrix.getX() == 1 || matrix.getY() == 1) {
Matrix vector;
int nub;
boolean isRow = false;
if (matrix.getX() == 1) {//行向量
isRow = true;
nub = matrix.getY() / 4;
vector = new Matrix(1, nub);
} else {//列向量
nub = matrix.getX() / 4;
vector = new Matrix(nub, 1);
}
int k = 0;
for (int i = 0; i < nub * 4 - 3; i += 4) {
没有合适的资源?快使用搜索试试~ 我知道了~
easyAi-master.zip
共120个文件
java:96个
jpg:18个
xml:2个
0 下载量 99 浏览量
2022-12-03
13:13:58
上传
评论
收藏 1.84MB ZIP 举报
温馨提示
java傻瓜ai框架,无需任何算法知识,通过简单的api调用就可以实现 常用的图像内物体的识别,定位等图像ai服务,及自然语言分类处理服务。面向java开发程序员,不依赖任何第三方库,第三方接口,独立包。
资源推荐
资源详情
资源评论
收起资源包目录
easyAi-master.zip (120个子文件)
.gitignore 1KB
easyAi.iml 935B
MatrixOperation.java 20KB
Watershed.java 16KB
NerveManager.java 15KB
Distinguish.java 14KB
GameRobotTest.java 13KB
Tokenizer.java 13KB
Matrix.java 13KB
Tree.java 12KB
Nerve.java 12KB
DynamicProgramming.java 12KB
Forest.java 11KB
MP3.java 9KB
RegressionForest.java 9KB
ModelData.java 9KB
RGBNorm.java 9KB
Talk.java 8KB
PSO.java 7KB
FastPictureExcerpt.java 6KB
LangTest.java 6KB
SentenceCreator.java 6KB
OutNerve.java 5KB
LVQ.java 4KB
RandomForest.java 4KB
ImageTest.java 4KB
Picture.java 4KB
Knn.java 4KB
WordTemple.java 4KB
Frequency.java 4KB
FoodConfig2.java 4KB
ThreeChannelMatrix.java 3KB
WaveFile.java 3KB
Box.java 3KB
MeanClustering.java 3KB
TemplateReader.java 3KB
GMClustering.java 3KB
RgbRegression.java 3KB
NMS.java 3KB
LinearRegression.java 3KB
SoftMax.java 2KB
Left.java 2KB
RegionBody.java 2KB
Right.java 2KB
Down.java 2KB
Up.java 2KB
Config.java 2KB
DataTable.java 2KB
RightTwo.java 2KB
LeftTwo.java 2KB
ModelParameter.java 2KB
Sentence.java 2KB
DynamicState.java 2KB
HiddenNerve.java 2KB
DownTwo.java 2KB
UpTwo.java 2KB
IdCreator.java 2KB
WordModel.java 2KB
Student.java 1KB
ArithUtil.java 1KB
LangBody.java 1KB
SensoryNerve.java 1KB
Model.java 1KB
PicturePosition.java 1KB
WorldBody.java 943B
RegionBack.java 745B
Word.java 727B
NerveStudy.java 685B
CreatorWord.java 636B
CreatorSentenceModel.java 624B
TanHX.java 596B
RGB.java 590B
FoodPicture.java 589B
Node.java 566B
VoiceTest.java 565B
WordOfShop.java 534B
ELu.java 532B
Tanh.java 509B
MatrixBody.java 508B
ReLuTwo.java 505B
TreeWithTrust.java 501B
GameConfig.java 500B
Action.java 500B
ConvBack.java 481B
ValueFunction.java 427B
OutBack.java 410B
DymNerveStudy.java 410B
KeyWord.java 392B
RGBSort.java 380B
Sigmoid.java 371B
WordConst.java 365B
ReLu.java 364B
RfModel.java 359B
IOConst.java 264B
ActiveFunction.java 257B
RZ.java 249B
PsoFunction.java 178B
Kernel.java 133B
back.jpg 184KB
a4.jpg 88KB
共 120 条
- 1
- 2
资源评论
m0_72731342
- 粉丝: 2
- 资源: 1832
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 全卷积网络基于voc2012数据集简单pytorch实现
- pycharm的一些介绍-用于更好的学习python
- 基于C++的程序设计大赛天梯赛L2答案(天梯赛)
- 基于python实现的三次样条插值和均值插值法实现
- Python语言教程2-python批量图片大小处理-多文件夹
- Python语言教程1-python批量图片重命名,将后缀某几个不想要的字去除
- Space Combat Kit 太空战斗套件Unity游戏开发插件资源unitypackage C#
- Universal Device Preview 通用设备预览Unity游戏开发插件资源unitypackage
- Paladin Anim Set 圣骑士动画集Unity游戏动作动画插件资源unitypackage
- 计算机财务管理期末考报表部分题目及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功