I have written code in Python to create a 4d matrix (4 inputs, 1 output) that will be saved as an xlsx.file. Then this data is read in and saved to an SDF file. The 4d Matrix is a dummy matrix for testing.
The SDF Editor gives me Errors:
The scale for dimension 1 does not match the extent of the dataset
The scale for dimension 2 does not match the extent of the dataset
The scale for dimension 3 does not match the extent of the dataset
The scale for dimension 4 does not match the extent of the dataset
and for the input data: the scales must be monotonically increasing
import pandas as pd
import numpy as np
from os import path
import scipy.interpolate as itp
import openpyxl
import h5py
import sdf
# Beispiel 4D-Matrix mit Dimensionen (a, b, c, d)
a_start = 1 # Startwert für a
b_start = 1 # Startwert für b
c_start = 1 # Startwert für c
d_start = 1 # Startwert für d
# Berechnung der Längen der Dimensionen
a_length = 6
b_length = 6
c_length = 6
d_length = 6
# Zufällige 4D-Matrix generieren
matrix_4d = np.random.rand(a_length, b_length, c_length, d_length)
# Zufällige 4D-Matrix generieren
matrix_4d = np.random.rand(a_length, b_length, c_length, d_length)
# Excel-Datei erstellen und Daten schreiben
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.append(['p_ND [bar]', 'p_HD [bar]', 'n [Hz]', 'm_ein [kg/s]', 'eta_vol', 'eta_is', 'eta_mech']) # Header schreiben
for i in range(a_start, a_start + a_length):
for j in range(b_start, b_start + b_length):
for k in range(c_start, c_start +c_length):
for l in range(d_start, d_start + d_length):
values = [matrix_4d[i - a_start, j - b_start, k - c_start, l - d_start],
np.random.rand(), # Zusätzlicher Wert 1
np.random.rand()] # Zusätzlicher Wert 2
sheet.append([i, j, k, l] + values)
workbook.save('4d_matrix.xlsx')
#Einlesen der xlsx Datei
df = pd.read_excel('4d_matrix.xlsx')
#df = pd.read_csv('3d_matrix.csv')
df.head(5)
ARRAY = df[["p_ND [bar]","p_HD [bar]", "n [Hz]", "m_ein [kg/s]", "eta_vol"]]
ARRAY.shape
#print(list(df["eta_vol"]))
Creating Dataset for SDF.file
ds_p_ND = sdf.Dataset('p_ND', data=list(df["p_ND [bar]"]), unit='bar', is_scale=True, display_name='Pressure')
ds_p_HD = sdf.Dataset('p_HD', data=list(df["p_HD [bar]"]), unit='bar', is_scale=True, display_name='Pressure')
ds_n = sdf.Dataset('n', data=list(df["n [Hz]"]), unit='Hz', is_scale=True, display_name='Speed')
ds_m_in = sdf.Dataset('m_in', data=list(df["m_ein [kg/s]"]), unit='kg/s', is_scale=True, display_name='Massflow')
ds_eta = sdf.Dataset('eta', data=matrix_4d, unit='', scales=[ds_p_ND, ds_p_HD, ds_n, ds_m_in])
g = sdf.Group('/', comment='Kennfelddaten Beispiel', datasets=[ds_p_ND, ds_p_HD, ds_n, ds_m_in, ds_eta ])
sdf.save('erstellensdf.sdf', g)
Update: new part for creating Dataset
#für 4D Matrix
ds_p_ND = sdf.Dataset('p_ND', data=[100000, 200000, 300000, 400000, 500000, 600000], unit='Pa', display_unit= 'bar', relative_quantity=True, is_scale=True, display_name='Pressure')
ds_p_HD = sdf.Dataset('p_HD', data=[100000, 200000, 300000, 400000, 500000, 600000], unit='Pa', display_unit= 'bar', relative_quantity=True, is_scale=True, display_name='Pressure')
ds_n = sdf.Dataset('n', data=[1, 2, 3, 4, 5, 6], unit='Hz', is_scale=True, relative_quantity=True, display_name='Speed')
ds_m_in = sdf.Dataset('m_in', data=[1, 2, 3, 4, 5, 6], unit='kg/s', is_scale=True, relative_quantity=True, display_name='Massflow')
ds_eta = sdf.Dataset('data', data=matrix_4d, unit='', scales=[ds_p_ND, ds_p_HD, ds_n, ds_m_in])