Fehlermeldung in Python mit PyFITS

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
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Hi,

ich bin zum ersten Mal in einem Forum und weiss deswegen nicht wo genau die Frage hingehört.
Bei mir besteht folgendes Problem: Ich soll eine FITS Datei mit Python/PyFITS öffnen.
Nur entsteht dabei ein Fehler, dass er die Datein nicht ganz öffnen kann und ich weiss nicht wie ich das beheben kann.

Zum anderen gibt er mir die Matrizen nicht vollständig aus sondern bricht die Ausgabe irgendwann ab. Zumindest vermute ich
das aufgrund der "..." .
Unten habe ich den sowohl den Quellcode, als auch die Ausgabe gepostet.
Es wäre wirklich klasse wenn mir da jemand helfen könnte, weil ich echt am verzweifeln bin.
Quellcode:

Code: Alles auswählen

import pyfits
import numpy

pyfits.info("D3.fts")

data_cube = pyfits.getdata("D3.fts",0)
                           
print(data_cube)
Ausgabe:

Code: Alles auswählen

>>> 
File may have been truncated: actual file length (16386880) is smaller than the expected size (16387200)
Filename: D3.fts
No.    Name         Type      Cards   Dimensions   Format
0    PRIMARY     PrimaryHDU      15   (320, 256, 100)   int16   
File may have been truncated: actual file length (16386880) is smaller than the expected size (16387200)
[[[ 12778.  12785.  12785. ...,  13094.  13089.  13082.]
  [ 12777.  12784.  12777. ...,  13092.  13095.  13086.]
  [ 12783.  12785.  12785. ...,  13096.  13092.  13092.]
  ..., 
  [ 13035.  13039.  13041. ...,  13173.  13171.  13167.]
  [ 13024.  13040.  13027. ...,  13174.  13175.  13168.]
  [ 13019.  13029.  13040. ...,  13172.  13172.  13167.]]

 [[ 12786.  12778.  12778. ...,  13087.  13090.  13087.]
  [ 12777.  12788.  12783. ...,  13090.  13089.  13086.]
  [ 12783.  12781.  12786. ...,  13091.  13100.  13095.]
  ..., 
  [ 13027.  13027.  13038. ...,  13172.  13171.  13165.]
  [ 13023.  13029.  13020. ...,  13176.  13179.  13166.]
  [ 13013.  13027.  13031. ...,  13175.  13180.  13174.]]

 [[ 12786.  12782.  12791. ...,  13094.  13090.  13087.]
  [ 12777.  12783.  12784. ...,  13092.  13087.  13085.]
  [ 12776.  12777.  12779. ...,  13090.  13095.  13094.]
  ..., 
  [ 13032.  13028.  13037. ...,  13170.  13174.  13163.]
  [ 13028.  13045.  13032. ...,  13179.  13178.  13170.]
  [ 13013.  13033.  13040. ...,  13178.  13178.  13173.]]

 ..., 
 [[ 12782.  12793.  12780. ...,  13104.  13097.  13089.]
  [ 12783.  12789.  12796. ...,  13106.  13103.  13095.]
  [ 12795.  12783.  12789. ...,  13104.  13105.  13098.]
  ..., 
  [ 13049.  13038.  13053. ...,  13179.  13177.  13177.]
  [ 13037.  13050.  13045. ...,  13190.  13184.  13181.]
  [ 13021.  13042.  13047. ...,  13192.  13189.  13184.]]

 [[ 12793.  12787.  12792. ...,  13101.  13104.  13092.]
  [ 12787.  12802.  12790. ...,  13104.  13097.  13102.]
  [ 12791.  12797.  12795. ...,  13100.  13102.  13102.]
  ..., 
  [ 13037.  13042.  13052. ...,  13187.  13175.  13185.]
  [ 13038.  13054.  13044. ...,  13182.  13192.  13180.]
  [ 13031.  13042.  13052. ...,  13187.  13189.  13185.]]

 [[ 12794.  12800.  12793. ...,  13104.  13099.  13095.]
  [ 12796.  12797.  12797. ...,  13106.  13093.  13095.]
  [ 12788.  12789.  12794. ...,  13100.  13101.  13101.]
  ..., 
  [ 13041.  13045.  13048. ...,  13187.  13172.  13186.]
  [ 13041.  13050.  13043. ...,  13192.  13189.  13176.]
  [ 13034.  13054.  13056. ...,  13195.  13195.  13181.]]]
>>>
Zuletzt geändert von Anonymous am Samstag 20. Oktober 2012, 16:33, insgesamt 1-mal geändert.
Grund: Syntax-Hervorhebung aktiviert
BlackJack

@pHoenix12: Die Warnung scheint ein Problem mit der FITS-Datei zu sein. Wie Du das beheben kannst — keine Ahnung, wer oder was auch immer die Datei erzeugt hat, hält sich nicht an die FITS-Spezifikation:

Ein `data block` ist laut Spezifikation 2280 Bytes gross. Jede Dateigrösse die kein Vielfaches davon ist, hat also ein Problem und führt zu der Warnung, die Du siehst. Dann gibt es noch diesen Satz:
3.3.2. Primary data array hat geschrieben:If the data array does not fill the final data block, the remainder of the data block shall be filled by setting all bits to zero.
Wenn man die Daten nicht mit Nullen auffüllt, dann fehlen bei den Dimensionen und dem Werttyp der Daten in Deiner Datei, und unter der Annahme, dass der Header nur einen Datenblock belegt, genau die 320 Bytes Differenz. Darum nehme ich mal die Software mit der die Datei erzeugt wurde, hat einfach nur nicht aufgefüllt und die Daten sind alle vorhanden.

Die '...' in der Ausgabe sind Auslassungspunkte und stehen für weitere Daten. Mal ernsthaft — Du möchtest doch nicht wirklich 8.192.000 Datenwerte in der Konsole vorbeirauschen sehen, oder? Es handelt sich hier um die Anzeige mit ``print``, die ist für Menschen gedacht und so viele Werte kann kein Mensch „verarbeiten”. Wenn Du unbedingt willst, kannst Du an den Parametern der ``print``-Darstellung mit `numpy.set_printoptions()` herum schrauben. Die Abkürzung greift in der Voreinstellung bei Arrays die insgesamt 1000 oder mehr Einträge haben und zeigt dann für jede Dimension die ersten und letzten drei Einträge.
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Erst einmal danke für die Antwort!

Also ich verstehe deine Antwort so, dass ich mir um den Fehler eigentlich keine Gedanken machen muss, weil die "wichtigen" Daten alle vorhanden sind. Schließlich will ich die Nullen zum "auffüllen" nicht bearbeiten?!

Aber zurück zu dem Problem mit den "...".
Mein Ziel ist es einmal die Daten auszulesen und in eine andere neue Datei formatiert abzuspeichern.
Nur leider kapiere ich beim besten Willen nicht, wo ich die einzelnen Dimensionen aus der Kopfzeile wiederfinde sprich
die (320, 256, 100) 100 Matrizen mit 256 Zeilen und 320 Spalten. D.h. wie ich mir die ganz ausgeben lassen kann.

Habe anahnd einer englischen Anleitung folgenden Code zuasmmen gefummelt.

Code: Alles auswählen

import pyfits

liste=pyfits.open("D3.FTS")

tbdata=liste[0].data
d=open("Versuch3.txt","w")
d.write(str(tbdata[0]))

d.close()
liste.close()
Damit müsste ich doch eigentlich die erste Zeile des ersten Datenblocks in die Datei schreiben?
Was mich nur wundert, er schreibt eine komplette Matrix in die Datei. Und tbdata lässt sich auch nur bis 6 erhöhen. Also
die 100 MAtrizen können damit auch nicht gemeint sein.

Kannst du mir evtl. noch einmal einen scharfen Tip geben, wie ich mit der print Formatierung alle Daten aus der Datei bekomme?
Sprich die 100 vollständigen Matrizen?

Ich bin da echt überfordert mit :cry:
Zuletzt geändert von Anonymous am Montag 22. Oktober 2012, 17:18, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@pHoenix12: Wenn es wirklich nur die Füllbytes sind, dann ist das nicht so schlimm.

Das `data`-Attribut beziehungsweise das Ergebnis der `pyfits.getdata()`-Funktion ist ein mehrdimensionales `numpy`-Array. Die Dimensionen davon kannst Du über das `shape`-Attribut abfragen:

Code: Alles auswählen

In [173]: fits = pyfits.open('test.fits')

In [174]: fits.info()
Filename: test.fits
No.    Name         Type      Cards   Dimensions   Format
0    PRIMARY     PrimaryHDU       7  (320, 256, 100)  int16

In [175]: data = fits[0].data

In [176]: data.shape
Out[176]: (100, 256, 320)
Also 100 2D-„Bilder” mit je 256 Zeilen und 320 Werte pro Zeile. Und da gehen auf jeden Fall höhere Indizes als 6 (ich habe das Array einfach mit Zufallszahlen gefüllt):

Code: Alles auswählen

In [177]: data[42]
Out[177]: 
array([[-11712,  17232,  -5282, ..., -29049,  24458,  19686],
       [ 13869,   5160,  21100, ...,  18829,   7451, -15938],
       [ 13695,  -3182, -13415, ...,  31296,  27018,  25478],
       ..., 
       [  6723, -21831,  -6632, ..., -17995, -19445,  14589],
       [-29187, -32132,  30307, ...,  -5254,  10907,  28654],
       [ 27611, -16033,   9579, ...,  29834,     60,  -1817]], dtype=int16)

In [178]: data[99]
Out[178]: 
array([[  3057,  31879,  19134, ..., -32454,   6308,  -2573],
       [-26763,   5487, -31949, ...,  17732,   1059, -24496],
       [-11698,  19509,  10669, ..., -20623,  14256, -18295],
       ..., 
       [  2179,  -3008, -27691, ..., -32270, -32674,  -4552],
       [ 13661,  19797,  15738, ...,  -1726,   4301,   1203],
       [ -8444,  12980,   3598, ..., -21949,   7760,  -2959]], dtype=int16)

In [179]: data[100]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

IndexError: index out of bounds
Die gehen also wie erwartet von 0 bis 99. Wenn sie bei Dir nur bis 6 gehen, dann sind nicht mehr Daten in der ersten Dimension verfügbar, oder die Datei enthält zu wenig Daten.

Damit bekommst Du auch nicht die erste Zeile des ersten Datenblocks, sondern das erste 256×320-Array. Um davon die erste Zeile zu bekommen musst Du entweder noch einen Indexzugriff dranhängen, oder den ersten Index passend angeben:

Code: Alles auswählen

In [184]: data[0][0]
Out[184]: 
array([ 27848,  -1354, -17549, -23013,  17614,   2444, -14238, -14879,
         9366,  16992,  27682,  -5416, -10988,  -5262,  -6087,   6977,
        27074, -15427,  16240,  19511, -16384, -32093,  31806, -21812,
       -13414,   7875, -12122, -12439,  19565,  25079, -26355, -19066,
        21693,  15598, -13242, -26427,  27370,  17026, -14459,  -9345,
        15645, -20634,  13053, -30161,  28530,  11470,  -9332, -26782,
         -844, -31923, -19764,  -9654,   6695,  18872,  31933,   1453,
        -8157,  20070,   4636,  18702, -19825, -17442,  24732,  -7078,
        23924,  18078, -13687,   4122,   9335, -16304, -30954,   -346,
         6460, -21590,  15165, -12192,  23035, -29884, -25666,  19529,
       -20813,  32550, -29514,    174,  14352, -23203, -32296,  15582,
        13787,  32363,  25036,    628, -26268,  -5730,  11217,  30552,
        20502,  -2963,  27059,  25385,  23203,  23248,  20482,   -218,
        20690,   1555,   4168,  21023,   6672, -20294,  21045, -15767,
         -987, -20734,  31511, -11757,  32686, -30092, -13605,  -8147,
       -27432,  -2102,  21217,  13571,    -57,  14966,   9078,  23178,
       -19387,  16789,  29907,  17996,    536,  -6346,  -2806,  15062,
        20741, -28208,   5848,  -4764, -14864,  12686, -31303,  19861,
       -26946,  18012,  10855,  11429, -18799, -13793,  24261, -31653,
        -3931, -23511,  -2116, -30895,  31506, -17647,  28361,  26858,
       -23394,  14243,  31473, -25366, -12655,   6058,   8579,   7052,
          792,  -8658,   1373,  11535,  -8706,  22327,  12420, -32592,
        10909,  -2437, -11971,  31345, -27540,  32285, -12221,  28776,
       -26382,  -5746,  -8009,  17373,  22698,  15637,  -3552,   4246,
       -20676, -15474,  -5116, -20862,   7441,  29544,  25114,  21924,
        -4412,  21102, -24045,  20472,  26810,  14380, -26945,   7829,
       -11031, -16620,  18012,  25149, -23896,  11324, -15720, -29441,
       -18074, -18300,  29363, -23852, -31579, -10659,  23203,   7744,
        25347,  18609, -16091,  30750,  -8363, -10508, -20790,  -4576,
        -3176,   6108, -25551,  10719,  18970, -18714,  30877, -27219,
       -31537,   5997,  20893,  12282, -24046,   -913,  25123, -13442,
       -32742,   1391,  31960, -24446,  -6679,  12851, -19495, -16137,
          579, -30888, -31916,  15106,   3568, -32672, -28880,   1825,
        17669,  11705,  28362,  23922, -14233,   6740, -13007,  22188,
        25489,   8920, -20615, -18855, -25235,  -6517, -13644,   1352,
         2048,   2046,  30597,  32413,   1133,  24746, -18815,  -5978,
         4681,  23841,  27171,  30355,  25677, -23049,   5093,  21901,
         5031,  10132,   9973, -11215,  32728, -31485,  -9674,  21096,
         7311,   6549,  26818,  28779,  -3069,  20295, -24506, -32118,
       -28501, -21941,  14413,  16287,   6977,  17557,  28409, -30438], dtype=int16)

In [185]: len(data[0][0])
Out[185]: 320

In [186]: (data[0][0] == data[0, 0]).all()
Out[186]: True
Wie schon gesagt: Mit der ``print``-Formatierung, also der Zeichenkettendarstellung von einem Array möchtest Du gar nichts machen. Selbst wenn alle Werte angezeigt werden, wie im Beispiel mit der Zeile weiter oben, hast Du all die Sachen da drin, die zu so einer Darstellung gehören wie (potentiell verschachtelte) Klammern, den Python-Datentyp, und den Datentyp eines einzelnen Elements wenn der vom Default abweicht. Das lässt sich nicht vernünftig wieder einlesen und weiterverarbeiten.

Als Text lassen sich 1D- und 2D-Daten mit `numpy.savetxt()` speichern. Zum Schreiben einer CSV-Datei kann man das `csv`-Modul aus der Standardbibliothek verwenden.

Code: Alles auswählen

In [207]: np.savetxt('test.txt', data[0], '%6d')

In [208]: !wc --lines test.txt
256 test.txt

In [209]: !wc --words test.txt
81920 test.txt

In [210]: 81920. / 256
Out[210]: 320.0

In [211]: !head -n 1 test.txt
 27848  -1354 -17549 -23013  17614   2444 -14238 -14879   9366  16992  27682  -5
416 -10988  -5262  -6087   6977  27074 -15427  16240  19511 -16384 -32093  31806
 -21812 -13414   7875 -12122 -12439  19565  25079 -26355 -19066  21693  15598 -1
3242 -26427  27370  17026 -14459  -9345  15645 -20634  13053 -30161  28530  1147
0  -9332 -26782   -844 -31923 -19764  -9654   6695  18872  31933   1453  -8157  
20070   4636  18702 -19825 -17442  24732  -7078  23924  18078 -13687   4122   93
35 -16304 -30954   -346   6460 -21590  15165 -12192  23035 -29884 -25666  19529 
-20813  32550 -29514    174  14352 -23203 -32296  15582  13787  32363  25036    
628 -26268  -5730  11217  30552  20502  -2963  27059  25385  23203  23248  20482
   -218  20690   1555   4168  21023   6672 -20294  21045 -15767   -987 -20734  3
1511 -11757  32686 -30092 -13605  -8147 -27432  -2102  21217  13571    -57  1496
6   9078  23178 -19387  16789  29907  17996    536  -6346  -2806  15062  20741 -
28208   5848  -4764 -14864  12686 -31303  19861 -26946  18012  10855  11429 -187
99 -13793  24261 -31653  -3931 -23511  -2116 -30895  31506 -17647  28361  26858 
-23394  14243  31473 -25366 -12655   6058   8579   7052    792  -8658   1373  11
535  -8706  22327  12420 -32592  10909  -2437 -11971  31345 -27540  32285 -12221
  28776 -26382  -5746  -8009  17373  22698  15637  -3552   4246 -20676 -15474  -
5116 -20862   7441  29544  25114  21924  -4412  21102 -24045  20472  26810  1438
0 -26945   7829 -11031 -16620  18012  25149 -23896  11324 -15720 -29441 -18074 -
18300  29363 -23852 -31579 -10659  23203   7744  25347  18609 -16091  30750  -83
63 -10508 -20790  -4576  -3176   6108 -25551  10719  18970 -18714  30877 -27219 
-31537   5997  20893  12282 -24046   -913  25123 -13442 -32742   1391  31960 -24
446  -6679  12851 -19495 -16137    579 -30888 -31916  15106   3568 -32672 -28880
   1825  17669  11705  28362  23922 -14233   6740 -13007  22188  25489   8920 -2
0615 -18855 -25235  -6517 -13644   1352   2048   2046  30597  32413   1133  2474
6 -18815  -5978   4681  23841  27171  30355  25677 -23049   5093  21901   5031  
10132   9973 -11215  32728 -31485  -9674  21096   7311   6549  26818  28779  -30
69  20295 -24506 -32118 -28501 -21941  14413  16287   6977  17557  28409 -30438
Höherdimensionale Daten lassen sich schlecht als Textdatei repräsentieren, da würde ich zu einem Binärformat raten. Zum Beispiel FITS. ;-)
BlackJack

@pHoenix12: Was möchtest Du mit den Daten denn *eigentlich* machen? Denn das Speichern in einer Textdatei scheint mir auf den ersten Blick nicht so sinnvoll zu sein. Ich habe mit die ``test.txt`` mal in einem Texteditor geöffnet und das bringt nicht viel. Es sind viel zu viele Daten um sie als Mensch sinnvoll zu erfassen. Selbst wenn ich das Editorfenster auf die volle Breite aufziehe und die Schriftgrösse verringere, bekomme ich keine einzelne Datenzeile komplett in einer Zeile auf dem Bildschirm angezeigt. Genau aus dem Grund macht `numpy` in die Zeichenkettendarstellung auch die Auslassungspunkte.

Wenn man da irgendwie sinnvoll etwas sehen möchte, muss man sich auf Ausschnitte beschränken oder Daten aggregieren bis es übersichtlicher wird. Oder sich das nicht als Text anschauen, sondern zum Beispiel als Graustufen- oder Falschfarbengrafik. Ein Programm dafür ist ImageJ.
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Also schon einmal vielen lieben Dank für deine Hilfe!!!!
Das hat mir echt schon weitergeholfen.

Um die ganze Sache mal ein wenig zu beleuchten: Ich soll im Rahmen einer Hiwi-Tätigkeit ein Programm schreiben,
dass die Daten aus der FTS-Datei in eine Datei mir "normalen" Format überträgt. Z.B. eine Datei die sich mit dem Editor öffnen lässt.
Deswegen meine Idee mit der txt-Datei.
Es gibt wohl auch das Format FTStemp, aber da habe ich wieder einmal kp was das ist...

In der FTS-Datei sind Pixel mit der entsprechenden Graufstufe enthalten. Da frage ich mich auch wieder wie in einer zweidimensionalen Matrix die Informationen versteckt sein sollen.
Das es sich dabei um 100 Bilder handelt ist soweit korrekt.

Tja und meine Schwierigkeit ist wie gesagt wie übertrage ich die Daten und vor allen dingen welche Aussagekraft haben die Daten. Was stellen die Zeilen/Spalten dar.
Ist es evtl. möglich das der Wert in Zeile 1 Spalte 1 die Graufstufe des Pixels an der Stelle 1,1 ist?

So ganz verstehe ich deinen letzten Code nicht. Was genau macht der Befehlausschnitt '%6d'?
Bzw. die Anweisungen danach?

Noch mal danke das du mir hilfst, ich weiss ich bin lästig. Aber solangsam verstehe ich das ganze :lol:
BlackJack

@pHoenix12: Aber es ist doch wichtig zu wissen zu welchem Zweck diese Umwandlung geschehen soll. 3D-Daten lassen sich schlecht in einer normalen, lesbaren Textdatei speichern. Darum ist das „normale”-Format für solche Daten ja so etwas wie FITS, netCDF, oder HDF.

Was die Daten darstellen und wie die Pixel angeordnet sind kann man nicht so allgemein sagen. FITS ist kein Bildformat wie PNG oder BMP wo Farben oder Graustufen in einem Raster von quadratischen Pixeln gespeichert sind, die im Grunde direkt für die Anzeige auf einem Monitor für das menschliche Auge gedacht sind. So etwas *kann* man in einer FITS-Datei speichern, macht man in der Regel aber nicht. In FITS sind in der Regel irgendwelche Messwerte in 2D oder Messreihen in 3D. Zum Beispiel die 2D-Daten von Radioteleskopen und in der dritten Dimension dann eine Zeitreihe. Oder in jeder Schicht in der dritten Dimension sind die Intensitätswerte eines anderen Frequenzbereichs gespeichert. Oder jedes Pixel repräsentiert einen Punkt im dreidimensionalen Raum. Beispiel wären Tomographieaufnahmen. Bei ImageJ ist zum Beispiel ein nettes 3D-Bild von einem Fliegengehirn im Beispielordner.

Die Pixel müssen nicht quadratisch sein wenn die Abtastdichte der Aufnahme nicht in beide Achsen gleich gross ist. Das rechteckige Array muss auch nicht einen rechteckigen Ausschnitt der Realität erfasst haben, d.h. die Abstände der Messwerte ist nicht zwischen allen benachbarten Pixeln gleich. Wenn es zum Beispiel eine Satellitenaufnahme der Erdoberfläche ist, dann erfasst der ja eine Kugel und die Pixel am Rand liegen dichter zusammen als die in der Mitte.

Wenn 0 die geringste Intensität und 10000 die Höchste ist, dann muss 5000 nicht die mittlere Intensität sein, denn oft liefern Sensoren keine linearen Werte sondern sind zum Beispiel bei schwachen Signalen empfindlicher als bei Starken, oder auch umgekehrt, oder es gibt irgendeine bauteilspezifische Kurve, welche den Wert vom Sensor auf den realen Messwert abbildet.

Weil das eigentlich mehr ein Messwertformat als ein einfaches Bildformat ist, kann man jede Menge zusätzlicher Meta-Information in FITS-Dateien speichern. Die würden bei einer Umwandlung in ein selbst entworfenes Textformat entweder wegfallen, oder man fängt an FITS neu zu erfinden, nur in schlechter. ;-)

Das '%6d' ist die Formatierungsanweisung für die Einzelwerte. Siehe Dokumentation von `numpy.savetxt()` und auch die normale Zeichenkettenformatierung mittels ``%``-Operator in Python.

Die Eingaben danach, die mit einem ``!`` anfangen sind Aufrufe der Standard-Unix-Programme ``wc`` (zum Zählen von Zeilen, Wörtern, und Zeichen in Textdateien) und ``head`` (zum Anzeigen der ersten n Zeilen einer Textdatei).
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Hi Black Jack,

mit deine Hilfe habe ich jetzt das was ich brauche um mein Programm zu schreiben.
Es fehlt mir nur noch Detail. Und zwar möchte ich in einer bestimmten Matrix EINEN bestimmten Wert bearbeiten.
Z.B. den Mittelwert aus den ersten beiden Elementen.
Aber ich weiss nicht wie ich den "anwähle" meine erste Vermutung war:

Code: Alles auswählen

daten=pyfits.open("D3.FTS")                       
tbdata=daten[0].data
mit=tbdata[0][0][0]+tbdata[0][0][1] #[Erste Matrix][Erste Zeile][Erster Wert]
Nur leider geht die Idee nicht auf.
Hast du da noch einmal einen Tip?

Grüße
pHoenix12
BlackJack

@pHoenix12: Also bei mir funktioniert das. Ist natürlich nicht der Mittelwert sondern erst einmal nur die Summe der beiden Werte, aber mehr steht da ja auch nicht.
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Beim direkten Ausgeben auf der Konsole klappt das bei mir auch nur beim berühmten abspeichern in eine Datei nicht mehr...

Code: Alles auswählen

numpy.savetxt("Versuch5.txt",tbdata[0][0][1],"%6.3f")
BlackJack

@pHoenix12: Gib doch bitte Fehlermeldungen an, oder wenn keine kommen das Ergebnis und eine Beschreibung wie das von dem abweicht, welches Du erwartest. „Klappt nicht” sagt irgendwie sehr wenig aus und man muss raten was denn genau das Problem ist.

Hier ist es offensichtlich wenn man in der Dokumentation von `numpy.savetxt()` nachschaut: Die Funktion speichert ein- und zweidimensionale Arrays. Und Du versuchst einen einzelnen, skalaren Wert zu speichern. Den kann man ja auch problemlos mit den Funktionen aus der Standardbibliothek und den Operationen auf den Grunddatentypen in eine Textdatei speichern.
pHoenix12
User
Beiträge: 6
Registriert: Samstag 20. Oktober 2012, 16:20

Habe den Fehler bereits gefunden. Mit dem Wissen was du mir mit auf den Weg gegeben hast sollte ich nun endlich meine Aufgabe lösen können.
Wenn nicht würde ich gerne noch mal auf dich zurückkommen.

Noch mals vielen Dank, wüsste nicht was ich ohne deine Hilfe gemacht hätte :D
Antworten