Seite 1 von 1
Numpy Vektor und Matrix
Verfasst: Montag 23. März 2009, 09:38
von mit
Hallo,
ich habe folgende Numpy Matrix und Vektor defenition:
Code: Alles auswählen
matrix=numpy.identity(3).astype('f')
vektor=numpy.array((1.0, 2.0, 3.0), 'f')
wie kann ich der matrix-Variable diese Matrix zuweisen:
Code: Alles auswählen
0.49414441, 0.85385353, 0.58296351
0.94858827, 0.98884874, 0.12940907
0.54979979, 0.63301335, 0.96602514
und wie kann ich der vektor-Variable diesen Vektor zuweisen:
?
Viele Grüße
Verfasst: Montag 23. März 2009, 12:17
von CM
Hoi,
usw. für alle weiteren Indices. Aber das ist nicht was Du willst, oder? Du möchtest irgendeine Operation anwenden, die aus diesen beiden arrays, die anderen erzeugt, oder? Welche Operation soll das denn sein? Dann können wir vielleicht weiterhelfen.
Gruß,
Christian
Verfasst: Dienstag 24. März 2009, 08:14
von mit
Ja du hast recht die Matrix und den Vektor erhalte ich aus der einem Programm der die Matrix und den Vektor in der Konsole ausgibt:
Code: Alles auswählen
import subprocess
command = "mat.exe"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
output = process.stdout
while output:
print output.readline(),
Ich bekomme folgende Ausgabe:
Code: Alles auswählen
Matrix und Vektor Ergebnis:
A = ( 0.488064)*X - ( 0.015443)*Y - ( 0.133266)*Z - ( 0.053533)
B = (-0.215563)*X - ( 0.999479)*Y - (-0.000333)*Z - ( 1.063577)
C = (-0.453254)*X - (-0.001977)*Y - ( 0.978185)*Z - ( 0.251960)
Die ersten drei Spalten gehören zur der Matrix und die letzte Spalte ist der Vektor.
Wie bekommt man am einfachsten die Matrix und den Vektor aus der Konsole in die Variablen geschrieben?
Verfasst: Dienstag 24. März 2009, 09:26
von BlackJack
@mit: Wenn das die ganze Ausgabe ist, dann lassen sich die Werte da zum Beispiel so herausfischen:
Code: Alles auswählen
tmp_matrix = list()
tmp_vector = list()
for line in output:
values = map(float, re.findall(r'\((.+?)\)', line))
if values:
tmp_matrix.append(values[:-1])
tmp_vector.append(values[-1])
matrix = numpy.array(tmp_matrix, dtype='f')
vector = numpy.array(tmp_vector, dtype='f')
Verfasst: Dienstag 24. März 2009, 12:06
von Carsten1983
Ich versteh das Konstrukt nicht mit dem du mithilfe von re.findall suchst.
Kannst du das vielleicht kurz erklären?
Verfasst: Dienstag 24. März 2009, 18:09
von Leonidas
Er sucht mehr als null beliebige Zeichen auf eine non-greedy-Art (``.+?``) die er als eine Gruppe haben will (innere Klammern) die von runden Klammen (``\(`` und ``\)``) umgeben sind.
Verfasst: Mittwoch 25. März 2009, 07:14
von Carsten1983

Danke
Verfasst: Donnerstag 26. März 2009, 10:17
von mit
Vielen danke, die Werte auslesen funktioniert perfekt mit deinem Code:
Code: Alles auswählen
import re
import numpy
tmp_matrix = list()
tmp_vector = list()
for line in open("../files/test.txt", "r").readlines():
values = map(float, re.findall(r'\((.+?)\)', line))
if values:
tmp_matrix.append(values[:-1])
tmp_vector.append(values[-1])
matrix = numpy.array(tmp_matrix, dtype='f')
vector = numpy.array(tmp_vector, dtype='f')
Aber wenn ich die gesamte Ausgabe
Code: Alles auswählen
Version 0.1
D: referenz.txt:A (Größe=851)
E: messung.txt:A (Größe=79)
Gesamtlänge = 29 RAC = 2.95V Fehler = 28(96.6%)
D: 97 IIIIIIIIIII
E: 48 ...IIIIIIII
A = ( 0.488064)*X - ( 0.015443)*Y - ( 0.133266)*Z - ( 0.053533)
B = (-0.215563)*X - ( 0.999479)*Y - (-0.000333)*Z - ( 1.063577)
C = (-0.453254)*X - (-0.001977)*Y - ( 0.978185)*Z - ( 0.251960)
betrachte funktioniert es leider nicht mehr.
Könntest du mir bitte noch zeigen wie man diese Werte noch übergeben könnte:
Referenz-Variable 851
Messung-Variable 79
Gesamtlänge-Variable 29
RAC-Variable 2.95
FehlerAnzahl-Variable 28
FehlerProzent-Variable 96.6
D-Variable 97
DM-Variable IIIIIIIIIII
E-Variable 48
EM-Variable ...IIIIIIII
?
Vielen Dank im Voraus.
Verfasst: Donnerstag 26. März 2009, 10:42
von Leonidas
Naja, du matchst einmal nach ``Größe=ZAHL`` und bekommst zwei Treffer, die dann einmal 851 und einmal 79 sind. Damn matcht du nach ``Gesamtlänge = ZAHL`` und hast dann 29. Danach nach ``RAC = ZAHL.ZAHLV`` und bekommst 2.95. Also ehrlich, so schwer ist das nicht, schau dir die Dokumentation zu Regulären Ausdrücken an und probiere im Interpreter herum. Es muss ja nicht sein, dass jemand dir dein Programm schreibt, wenn du es auch ganz einfach selbst könntest.
Verfasst: Donnerstag 26. März 2009, 10:51
von CM
Und außerdem: Kennst Du x, y und z oder a, b, c? Dann könntest Du die jeweils anderen Werte sehr einfach selber berechnen - das ist doch viel einfacher, als das Rumfummeln mit regexes - vor allem auf lange Sicht (jede Änderung Deines Output-Files bedeutet nämlich eine Änderung an diesen seltsamen Parsern. Und wenn Du die Zahlen nicht kennst, kannst Du immer noch einen LS-Algorithmus nehmen, um an optimale Lösungen zu kommen.
Gruß,
Christian