update dataframe and matrix

This commit is contained in:
fenix-hub 2022-01-09 19:38:53 +01:00
parent ef0c1dba93
commit 161757cca9
3 changed files with 18 additions and 21 deletions

View File

@ -10,7 +10,7 @@ var dataset : Array = []
func _init(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void: func _init(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void:
if labels.empty() : for label in range(datamatrix.get_size().x) : labels.append(label as String) if labels.empty() : for label in range(datamatrix.get_size().x) : labels.append(label as String)
if headers.empty() : for header in range(datamatrix.get_size().y) : headers.append(ECUtilities.get_letter_index(header)) if headers.empty() : for header in range(datamatrix.get_size().y) : headers.append(MatrixGenerator.get_letter_index(header))
build_dataframe(datamatrix, headers, labels, table_name) build_dataframe(datamatrix, headers, labels, table_name)
func build_dataframe(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void: func build_dataframe(datamatrix : Matrix, headers : PoolStringArray = [], labels : PoolStringArray = [] , table_name : String = "") -> void:
@ -21,7 +21,7 @@ func build_dataframe(datamatrix : Matrix, headers : PoolStringArray = [], labels
self.dataset = build_dataset_from_matrix(datamatrix, headers, labels) self.dataset = build_dataset_from_matrix(datamatrix, headers, labels)
func build_dataset(data : Array, headers : PoolStringArray, labels : PoolStringArray) -> Array: func build_dataset(data : Array, headers : PoolStringArray, labels : PoolStringArray) -> Array:
var dataset : Array = [Array(headers)] var dataset : Array = [Array([""]) + Array(headers)]
for row_i in range(data.size()): dataset.append([labels[row_i]]+data[row_i]) for row_i in range(data.size()): dataset.append([labels[row_i]]+data[row_i])
return dataset return dataset
@ -30,16 +30,15 @@ func build_dataset_from_matrix(datamatrix : Matrix, headers : PoolStringArray, l
return build_dataset(data, headers, labels) return build_dataset(data, headers, labels)
func insert_column(column : Array, header : String = "", index : int = dataset[0].size()) -> void: func insert_column(column : Array, header : String = "", index : int = dataset[0].size()) -> void:
assert(column.size() == datamatrix.rows(), "error: the column size must match the dataset column size") headers.insert(index, header if header != "" else MatrixGenerator.get_letter_index(index))
headers.insert(index, header if header != "" else ECUtilities.get_letter_index(index))
datamatrix.insert_column(column, index-1) datamatrix.insert_column(column, index-1)
dataset = build_dataset_from_matrix(datamatrix, headers, labels) dataset = build_dataset_from_matrix(datamatrix, headers, labels)
func insert_row(row : Array, label : String = "", index : int = dataset.size()) -> void: func insert_row(row : Array, label : String = "", index : int = dataset.size()) -> PoolStringArray:
assert(row.size() == datamatrix.columns(), "error: the row size must match the dataset row size")
labels.insert(index-1, label if label != "" else (index-1) as String) labels.insert(index-1, label if label != "" else (index-1) as String)
datamatrix.insert_row(row, index-1) datamatrix.insert_row(row, index-1)
dataset = build_dataset_from_matrix(datamatrix, headers, labels) dataset = build_dataset_from_matrix(datamatrix, headers, labels)
return PoolStringArray([label] + row)
func get_datamatrix() -> Matrix: func get_datamatrix() -> Matrix:
return datamatrix return datamatrix
@ -59,14 +58,12 @@ func _to_string() -> String:
for column in row: for column in row:
var string_len : int = str(column).length() var string_len : int = str(column).length()
last_string_len = string_len if string_len > last_string_len else last_string_len last_string_len = string_len if string_len > last_string_len else last_string_len
var string : String = "" var string : String = "\n"
for row_i in dataset.size(): for row_i in dataset.size():
if row_i == 0:
string+="%*s" % [last_string_len+1, ""] if get_dataset()[0].size() < get_dataset()[1].size() else ""
for column_i in dataset[row_i].size(): for column_i in dataset[row_i].size():
string+="%*s" % [last_string_len+1, dataset[row_i][column_i]] string+="%*s" % [last_string_len+1, dataset[row_i][column_i]]
string+="\n" string+="\n"
string+="\n['{table_name}' : {rows} rows x {columns} columns]\n".format({ string+="['{table_name}' : {rows} rows x {columns} columns]\n".format({
rows = datamatrix.rows(), rows = datamatrix.rows(),
columns = datamatrix.columns(), columns = datamatrix.columns(),
table_name = table_name}) table_name = table_name})

View File

@ -4,15 +4,17 @@ class_name Matrix
var values : Array = [] var values : Array = []
func _init(matrix : Array = []) -> void: func _init(matrix : Array = [], size : int = 0) -> void:
values = matrix values = matrix
func insert_row(row : Array, index : int = values.size()) -> void: func insert_row(row : Array, index : int = values.size()) -> void:
assert(row.size() == values[0].size(), "the row size must match matrix row size") if rows() != 0:
assert(row.size() == columns(), "the row size must match matrix row size")
values.insert(index, row) values.insert(index, row)
func insert_column(column : Array, index : int = values[0].size()) -> void: func insert_column(column : Array, index : int = values[0].size()) -> void:
assert(column.size() == values.size(), "the column size must match matrix column size") if columns() != 0:
assert(column.size() == rows(), "the column size must match matrix column size")
for row_idx in column.size(): for row_idx in column.size():
values[row_idx].insert(index, column[row_idx]) values[row_idx].insert(index, column[row_idx])
@ -20,13 +22,13 @@ func to_array() -> Array:
return values.duplicate(true) return values.duplicate(true)
func get_size() -> Vector2: func get_size() -> Vector2:
return Vector2(values.size(), values[0].size()) return Vector2(rows(), columns())
func rows() -> int: func rows() -> int:
return values.size() return values.size()
func columns() -> int: func columns() -> int:
return values[0].size() return values[0].size() if rows() != 0 else 0
func get_column(column : int) -> Array: func get_column(column : int) -> Array:
assert(column < columns(), "index of the column requested (%s) exceedes matrix columns (%s)"%[column, columns()]) assert(column < columns(), "index of the column requested (%s) exceedes matrix columns (%s)"%[column, columns()])
@ -77,9 +79,3 @@ func _get(_property : String):
else: else:
if (_property as String).is_valid_integer(): if (_property as String).is_valid_integer():
return get_row(_property as int) return get_row(_property as int)

View File

@ -92,3 +92,7 @@ static func multiply_float(_matrix1 : Matrix, _float : float) -> Matrix:
for y in range(_matrix1.to_array()[x].size()): for y in range(_matrix1.to_array()[x].size()):
array[x][y]*=_float array[x][y]*=_float
return Matrix.new(array) return Matrix.new(array)
# ------------------------------------------------------------
static func get_letter_index(index : int) -> String:
return "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(" ")[index]