How to create a 4d Matrix with Python and export in a SDF file?

42 Views Asked by At

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])
0

There are 0 best solutions below