Matrixspalten mit Vektoren füllen
Verfasst: Sonntag 7. Juni 2020, 17:19
Hallo zusammen,
mein Problem ist folgendes:
Ich lade eine Tabelle (25x3) ein (Eingabedaten), möchte eine Ausgabedatei erzeugen mit in diesem Beispiel der Form 50x4.
In der Ausgabedatei sollen die erste und letzte Spalte verändert werden.
die 50 Zeilen und 4 Spalten entstehen daraus, dass ich die Eingabedatei einmal kopieren will --> 50 Zeilen und eine Spalte hinzufüge.
das ganze will ich in einer for Schleife machen, um später den Vorgang beliebig oft zu wiederholen.
Im Code wird der Einfachheit wegen nur die erste Spalte in der for Schleife bearbeitet.
Hier der Code, der nicht funktioniert... VIELEN DANK SCHON MAL
Fehlermeldung: line 28, in <module>
aData_3D[i*nM:(nM-1)*(i+1),0] = (aNodeNumber + i * nMaxNodes)
ValueError: output operand requires a reduction, but reduction is not enabled
# -*- coding: cp1252 -*-
# used libraries
import sys
import math
import os
import numpy as np
#------------- Daten einlesen ---------------------------------------------
sInNodes = "Platte_nodes.inp" # Name der Eingabedatei
sBaseDic = os.getcwd() # Verzeichnis
sInNodesD = sBaseDic + "\\" + sInNodes
aData_2D=np.genfromtxt(sInNodesD,delimiter=',',comments='*') # shape (25,3)
print np.shape(aData_2D)
print "\n"
#------------- Konstanten -------------------------------------------------
nMaxNodes = 1000000
nSmax = 5 # Gesamtdicke der Z-Koordinate /mm
nN = 2 # Anzahl der Punkte in Tiefenrichtung
nM = len(aData_2D) # Anzahl der Punkte aus der eingeladenen Datei (nM = 25)
nDeltaZ = nSmax / (nN - 1) # Änderung der Z-Koordinate
#------------- Vektoren aus Eingabedatei extrahieren ---------------------
aNodeNumber = aData_2D[:,0].reshape((nM,1)) # shape (25,1)
aNodePosition = aData_2D[:,1:3] # shape (25,2)
#------------ Matrix der Ausgabedatei ------------------------------------
aData_3D = np.zeros((nM*nN, 4)) # shape (50,4)
#--- Zuweisen der einzelnen Spalten 1 bis 4 der Ausgabedatei--------------
for i in range(nN-1):
aData_3D[i*nM:(nM-1)*(i+1),0] = (aNodeNumber + i * nMaxNodes)
# erster Schleifendurchgang: i = 0
# Zeilen 0 - 24, Spalte 0 --> Einträge in aData_3D(0:24,0) durch den Vektor aNodeNumber ersetzen
# zweiter Schleifendurchgang: i = 1
# Zeilen 25 - 49, Spalte 0 --> Einträge in aData_3D(25:49,0) durch den Vektor aNodeNumber*nMaxNodes ersetzen
mein Problem ist folgendes:
Ich lade eine Tabelle (25x3) ein (Eingabedaten), möchte eine Ausgabedatei erzeugen mit in diesem Beispiel der Form 50x4.
In der Ausgabedatei sollen die erste und letzte Spalte verändert werden.
die 50 Zeilen und 4 Spalten entstehen daraus, dass ich die Eingabedatei einmal kopieren will --> 50 Zeilen und eine Spalte hinzufüge.
das ganze will ich in einer for Schleife machen, um später den Vorgang beliebig oft zu wiederholen.
Im Code wird der Einfachheit wegen nur die erste Spalte in der for Schleife bearbeitet.
Hier der Code, der nicht funktioniert... VIELEN DANK SCHON MAL

Fehlermeldung: line 28, in <module>
aData_3D[i*nM:(nM-1)*(i+1),0] = (aNodeNumber + i * nMaxNodes)
ValueError: output operand requires a reduction, but reduction is not enabled
# -*- coding: cp1252 -*-
# used libraries
import sys
import math
import os
import numpy as np
#------------- Daten einlesen ---------------------------------------------
sInNodes = "Platte_nodes.inp" # Name der Eingabedatei
sBaseDic = os.getcwd() # Verzeichnis
sInNodesD = sBaseDic + "\\" + sInNodes
aData_2D=np.genfromtxt(sInNodesD,delimiter=',',comments='*') # shape (25,3)
print np.shape(aData_2D)
print "\n"
#------------- Konstanten -------------------------------------------------
nMaxNodes = 1000000
nSmax = 5 # Gesamtdicke der Z-Koordinate /mm
nN = 2 # Anzahl der Punkte in Tiefenrichtung
nM = len(aData_2D) # Anzahl der Punkte aus der eingeladenen Datei (nM = 25)
nDeltaZ = nSmax / (nN - 1) # Änderung der Z-Koordinate
#------------- Vektoren aus Eingabedatei extrahieren ---------------------
aNodeNumber = aData_2D[:,0].reshape((nM,1)) # shape (25,1)
aNodePosition = aData_2D[:,1:3] # shape (25,2)
#------------ Matrix der Ausgabedatei ------------------------------------
aData_3D = np.zeros((nM*nN, 4)) # shape (50,4)
#--- Zuweisen der einzelnen Spalten 1 bis 4 der Ausgabedatei--------------
for i in range(nN-1):
aData_3D[i*nM:(nM-1)*(i+1),0] = (aNodeNumber + i * nMaxNodes)
# erster Schleifendurchgang: i = 0
# Zeilen 0 - 24, Spalte 0 --> Einträge in aData_3D(0:24,0) durch den Vektor aNodeNumber ersetzen
# zweiter Schleifendurchgang: i = 1
# Zeilen 25 - 49, Spalte 0 --> Einträge in aData_3D(25:49,0) durch den Vektor aNodeNumber*nMaxNodes ersetzen