package iail.mdk.model.utils;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
/**
|
* @description:
|
* @author: dzd
|
* @date: 2024/10/12 9:19
|
**/
|
public class AlgsUtils {
|
private HashMap<String, Object> model = new HashMap();
|
private HashMap<String, Object> eval_pre = new HashMap();
|
private HashMap<String, Object> train_result_models = new HashMap();
|
|
public AlgsUtils() {
|
}
|
|
public HashMap<String, Object> createPredictHashmap(HashMap<String, Object> models) {
|
if (models.containsKey("model")) {
|
String aaa;
|
if (((String) ((HashMap) models.get("model")).get("param1")).isEmpty()) {
|
aaa = "error";
|
this.model.put("param1", aaa);
|
} else {
|
aaa = (String) ((HashMap) models.get("model")).get("param1");
|
this.model.put("param1", aaa);
|
}
|
} else {
|
this.model = models;
|
}
|
|
return this.model;
|
}
|
|
public HashMap<String, Object> createPredictHashmapplus(HashMap<String, Object> models) {
|
if (models.containsKey("models")) {
|
String aaa;
|
if (((String) ((HashMap) models.get("models")).get("paramFile")).isEmpty()) {
|
aaa = "error";
|
this.model.put("param1", aaa);
|
} else {
|
aaa = (String) ((HashMap) models.get("models")).get("paramFile");
|
this.model.put("paramFile", aaa);
|
if (((HashMap) models.get("models")).containsKey("dim")) {
|
Object dim = ((HashMap) models.get("models")).get("dim");
|
this.model.put("dim", dim);
|
}
|
}
|
} else {
|
this.model = models;
|
}
|
|
return this.model;
|
}
|
|
public HashMap<String, Object> reverseModels(HashMap<String, Object> train_result) {
|
if (train_result.containsKey("models")) {
|
this.train_result_models = (HashMap) train_result.get("models");
|
if (((HashMap) train_result.get("models")).containsKey("dim")) {
|
double dim = Double.parseDouble((String) ((HashMap) train_result.get("models")).get("dim"));
|
this.train_result_models.put("dim", dim);
|
}
|
|
train_result.put("models", this.train_result_models);
|
}
|
|
return train_result;
|
}
|
|
public int[] getColAndRow(double[][] arr) {
|
int row = arr.length;
|
int col = arr[0].length;
|
int[] result = new int[]{row, col};
|
return result;
|
}
|
|
public double[][] getMathergeArr(double[][] data, double[][] refs) {
|
int[] dataRowAndCol = this.getColAndRow(data);
|
int rowData = dataRowAndCol[0];
|
int colData = dataRowAndCol[1];
|
int[] refsRowAndCol = this.getColAndRow(refs);
|
int rowrefs = refsRowAndCol[0];
|
int colrefs = refsRowAndCol[1];
|
double[][] newData = new double[rowData + rowrefs][colData];
|
|
int i;
|
int j;
|
for (i = 0; i < rowData; ++i) {
|
for (j = 0; j < colData; ++j) {
|
newData[i][j] = data[i][j];
|
}
|
}
|
|
for (i = 0; i < rowrefs; ++i) {
|
for (j = 0; j < colrefs; ++j) {
|
newData[i + rowData][j] = refs[i][j];
|
}
|
}
|
|
return newData;
|
}
|
|
public HashMap<String, Object> reverseResult(HashMap<String, Object> result) {
|
if (null == result) {
|
return result;
|
}
|
String code = reverseResultCode(result);
|
if (!"100".equals(code)) {
|
return result;
|
}
|
reverseResultValues(result);
|
reverseTest(result);
|
reverseEval(result);
|
reverseOptdParams(result);
|
return result;
|
}
|
|
private void reverseResultValues(HashMap<String, Object> result) {
|
// 将result中的Double数组转为double数组
|
if (result.containsKey("result")) {
|
HashMap<String, Object> resultValues = (HashMap) result.get("result");
|
for (Map.Entry<String, Object> entry : resultValues.entrySet()) {
|
if (entry.getValue() instanceof Double[]) {
|
//一维数组
|
Double[] value = (Double[]) entry.getValue();
|
double[] value1 = new double[value.length];
|
for (int i = 0; i < value.length; i++) {
|
Double d = value[i];
|
if (Double.isNaN(d)) {
|
value1[i] = new Double(0.0).doubleValue();
|
} else {
|
value1[i] = d.doubleValue();
|
}
|
}
|
resultValues.put(entry.getKey(),value1);
|
}
|
|
if (entry.getValue() instanceof Double[][]) {
|
//二维数组
|
Double[][] value = (Double[][]) entry.getValue();
|
double[][] value1 = new double[value.length][];
|
for (int i = 0; i < value.length; i++) {
|
value1[i] = new double[value[i].length];
|
for (int j = 0; j < value[i].length; j++) {
|
Double d = value[i][j];
|
if (Double.isNaN(d)) {
|
value1[i][j] = new Double(0.0).doubleValue();
|
} else {
|
value1[i][j] = d.doubleValue();
|
}
|
}
|
}
|
resultValues.put(entry.getKey(),value1);
|
}
|
}
|
}
|
}
|
|
|
private String reverseResultCode(HashMap<String, Object> result) {
|
String code = result.containsKey("status_code") ? String.valueOf(result.get("status_code")) : "400";
|
result.put("status_code", code);
|
return code;
|
}
|
|
private void reverseTest(HashMap<String, Object> result) {
|
if (result.containsKey("test")) {
|
HashMap<String, Object> test = (HashMap) result.get("test");
|
Double[][] realValue = (Double[][]) test.get("realValue");
|
Double[][] predictValue = (Double[][]) test.get("predictValue");
|
double[][] realValue1 = new double[realValue.length][2];
|
double[][] predictValue1 = new double[predictValue.length][2];
|
for (int i = 0; i < realValue.length; i++) {
|
for (int j = 0; j < realValue[i].length; j++) {
|
Double d = (Double) realValue[i][j];
|
if (Double.isNaN(d)) {
|
realValue1[i][j] = new Double(0.0).doubleValue();
|
} else {
|
realValue1[i][j] = d.doubleValue();
|
}
|
|
}
|
}
|
for (int i = 0; i < predictValue.length; i++) {
|
for (int j = 0; j < predictValue[i].length; j++) {
|
Double d = (Double) predictValue[i][j];
|
if (Double.isNaN(d)) {
|
predictValue1[i][j] = new Double(0.0).doubleValue();
|
} else {
|
predictValue1[i][j] = d.doubleValue();
|
}
|
|
}
|
}
|
HashMap<String, double[][]> map = new HashMap<>();
|
map.put("realValue", realValue1);
|
map.put("predictValue", predictValue1);
|
|
result.put("test", map);
|
}
|
}
|
|
public void reverseEval(HashMap<String, Object> result) {
|
if (result.containsKey("eval")) {
|
HashMap<String,Object> eval = (HashMap<String,Object>) result.get("eval");
|
HashMap<String, String> evalMap = new HashMap<>(eval.size());
|
|
for (HashMap.Entry<String, Object> entry : eval.entrySet()) {
|
evalMap.put(entry.getKey(),String.valueOf(entry.getValue()));
|
}
|
|
result.put("eval",evalMap);
|
}
|
}
|
|
private void reverseOptdParams(HashMap<String, Object> result) {
|
if (result.containsKey("paramsopt")) {
|
HashMap<String,Object> params = (HashMap<String,Object>) result.get("paramsopt");
|
HashMap<String, String> newParams = new HashMap<>(params.size());
|
|
for (HashMap.Entry<String, Object> entry : params.entrySet()) {
|
newParams.put(entry.getKey(),String.valueOf(entry.getValue()));
|
}
|
|
result.put("optdParams",newParams);
|
}
|
}
|
}
|