ssa

Форк
0
/
matlabSave.go 
159 строк · 3.9 Кб
1
package oss
2

3
// Этот модуль необходим для сохранения данных в папку File_For_MatLab. А файл plotting.m рисует графики на основании полученных данных.
4

5
import (
6
	"fmt"
7
	"log"
8
	"math"
9
	"os"
10
	"sort"
11
	"strconv"
12

13
	"github.com/xuri/excelize/v2"
14
	"gonum.org/v1/gonum/mat"
15
)
16

17
// Сохранить данные массива float64
18
//
19
//	xlsx
20
func Matlab_arr_float(arr []float64, Path, FileName string) error {
21
	// err := Matlab_mkDir(number, Path)
22
	// if err != nil {
23
	// 	fmt.Println(err)
24
	// }
25
	file_graph := excelize.NewFile()
26
	file_graph.NewSheet("main")
27
	file_graph.DeleteSheet("Sheet1")
28
	for ind, val := range arr {
29
		file_graph.SetCellValue("main", "A"+strconv.Itoa(ind+1), val)
30
	}
31
	// "File_For_MatLab" + OpSystemFilder + strconv.Itoa(number) + OpSystemFilder + fileName + ".xlsx"
32
	if err := file_graph.SaveAs(Path + FileName); err != nil {
33
		fmt.Println(err)
34
	}
35
	file_graph.Close()
36
	return nil
37
}
38

39
// Сохранить данные массива float64
40
//
41
//	xlsx
42
func Matlab_mat_Vector(vect mat.Vector, Path, FileName string) error {
43
	// err := Matlab_mkDir(number, Path)
44
	// if err != nil {
45
	// 	fmt.Println(err)
46
	// }
47
	file_graph := excelize.NewFile()
48
	file_graph.NewSheet("main")
49
	file_graph.DeleteSheet("Sheet1")
50
	for ind := 0; ind < vect.Len(); ind++ {
51
		file_graph.SetCellValue("main", "A"+strconv.Itoa(ind+1), vect.AtVec(ind))
52
	}
53
	// "File_For_MatLab" + OpSystemFilder + strconv.Itoa(number) + OpSystemFilder + fileName + ".xlsx"
54
	if err := file_graph.SaveAs(Path + FileName); err != nil {
55
		fmt.Println(err)
56
	}
57
	file_graph.Close()
58
	return nil
59
}
60

61
// Сохранить данные переменной int
62
//
63
//	txt
64
func Matlab_variable(data int, Path, FileName string) error {
65
	// err := Matlab_mkDir(number, Path)
66
	// if err != nil {
67
	// 	fmt.Println(err)
68
	// }
69
	// create file
70
	// Path + "File_For_MatLab" + OpSystemFilder + strconv.Itoa(number) + OpSystemFilder + fileName + ".txt"
71
	f, err := os.Create(Path + FileName)
72
	if err != nil {
73
		log.Println(err)
74
	}
75
	// remember to close the file
76
	defer f.Close()
77

78
	_, err = f.WriteString(fmt.Sprintf("%v", data))
79

80
	return err
81
}
82

83
func Mean(arr []float64) float64 {
84
	var meanVar float64
85
	for _, val := range arr {
86
		meanVar += val
87
	}
88
	return meanVar / float64(len(arr))
89
}
90

91
// *****************************************************************************
92

93
func Prctile(input []float64, percent float64) float64 {
94
	var percentile float64
95
	length := len(input)
96
	if length == 0 {
97
		return math.NaN()
98
	}
99

100
	if length == 1 {
101
		return input[0]
102
	}
103

104
	if percent <= 0 || percent > 100 {
105
		return math.NaN()
106
	}
107

108
	// Start by sorting a copy of the slice
109
	//c := sortedCopy(input)
110
	sort.Float64s(input)
111

112
	// Multiply percent by length of input
113
	index := (percent / 100) * float64(len(input))
114

115
	// Check if the index is a whole number
116
	if index == float64(int64(index)) {
117

118
		// Convert float to int
119
		i := int(index)
120

121
		// Find the value at the index
122
		percentile = input[i-1]
123

124
	} else if index > 1 {
125

126
		// Convert float to int via truncation
127
		i := int(index)
128

129
		// Find the average of the index and following values
130
		percentile = Mean([]float64{input[i-1], input[i]}) // Mean(Float64Data{input[i-1], input[i]})
131

132
	} else {
133
		return math.NaN()
134
	}
135

136
	return percentile
137

138
}
139

140
// *****************************************************************************
141

142
// Сохранить данные матрицы mat.Dense
143
func Matlab_mat_Dense(X *mat.Dense, Path, FilePathName string) error {
144
	file_graph := excelize.NewFile()
145
	file_graph.NewSheet("main")
146
	file_graph.DeleteSheet("Sheet1")
147
	n, m := X.Dims()
148
	for i := 0; i < n; i++ {
149
		for j := 0; j < m; j++ {
150
			file_graph.SetCellValue("main", GetColumnName(j+1)+strconv.Itoa(i+1), X.At(i, j))
151
		}
152
	}
153
	// Path + "File_For_MatLab" + OpSystemFilder + strconv.Itoa(number) + OpSystemFilder + fileName + ".xlsx"
154
	if err := file_graph.SaveAs(Path + FilePathName); err != nil {
155
		fmt.Println(err)
156
	}
157
	file_graph.Close()
158
	return nil
159
}
160

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.