Numpy Vektor und Matrix

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

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:

Code: Alles auswählen

-17.68628697,  11.10010487, -11.98381306
?

Viele Grüße
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

Code: Alles auswählen

vektor[0] = -17.68628697
matrix[0][0] = 0.49414441
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
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

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?
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')
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

Code: Alles auswählen

re.findall(r'\((.+?)\)', line)
Ich versteh das Konstrukt nicht mit dem du mithilfe von re.findall suchst. :oops:

Kannst du das vielleicht kurz erklären?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

:D Danke
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Antworten