Verwenden von SkyChoord zum Einlesen mehrerer Koordinaten.

Daher habe ich kürzlich einen einfachen Code geschrieben, um die Entfernung zwischen zwei Punkten zu analysieren, die in zwei separaten Excel-Dateien gespeichert sind. Jetzt, da ich diesen Code habe, ist es an der Zeit, die legitime Verwendung anzuwenden und diesen Code zu verwenden, um nicht nur 2 Dimensionen (x,y), sondern drei (ra,dec,z) zu analysieren. In den Datenblättern habe ich nun die Koordinaten von zwei getrennten Galaxien gespeichert. Hier ist der geänderte Code unten:

import math
import pandas
file1 = pandas.read_excel('Book1.xlsx')
file2 = pandas.read_excel('Book2.xlsx')
file1['RA_diff'] = file2['RA'] - file1['RA']
file1['DEC_diff'] = file2['DEC'] - file1['DEC']
file1['Z_diff'] = file2['Z'] - file1['Z']
dist = file1.apply(lambda row: math.hypot(row['RA_diff'], row['DEC_diff', row['Z_diff']]),   axis=1)
if dist.values >= .5:
    print 'no match'
elif dist.values <= .5:
    print True, dist

Dieser Code funktioniert hervorragend nur mit RA und DEC, aber nicht viel mit dem hinzugefügten Z.

Ich hoffe, dass mir jemand bitte einige Hinweise gibt, wie ich diesen ganzen Prozess verkürzen kann, indem ich die Methode verwende:

from astropy.coordinates import SkyCoord

Grundsätzlich: Wie nutze ich dieses Tool zu meinem Vorteil, indem ich (aus zwei separaten Excel-Dokumenten) zwei separate Koordinaten von (ra, dec, z) einlese, um festzustellen, ob die Objekte eine gewisse Nähe zueinander haben?

Meine Recherche hat sich als eher erfolglos erwiesen, die Punkte auf diese Weise gezielt zu analysieren, da ich die Hilfeseiten meistens einfach nicht verstehe. Dies ist mein allererstes Programmierprojekt, also seien Sie bitte vorsichtig mit Ihren Ratschlägen, Empfehlungen, Hilfe, Feedback oder allem anderen, was Sie anbieten können. Danke im Voraus.

Antworten (1)

Aus der Dokumentation

>>> c1 = SkyCoord(ra=10*u.degree, dec=9*u.degree, distance=10*u.pc, frame='icrs')
>>> c2 = SkyCoord(ra=11*u.degree, dec=10*u.degree, distance=11.5*u.pc, frame='icrs')
>>> c1.separation_3d(c2)  
<Distance 1.5228602415117989 pc>

Der Rest des Codes liest nur die Excel-Dateien und druckt die Ergebnisse. Was Sie jetzt haben, ist auch ohne die "z" -Koordinate falsch. Sie können den Abstand zweier Punkte in Kugelkoordinaten nicht mit dem Satz des Pythagoras berechnen: zB (30*, 0*) und (30*, 359*) sollten sehr nahe beieinander liegen. Sie müssen zuerst in kartesische Koordinaten konvertieren, was das Astropiemodul tut.

OK, danke, also ist das, was Sie oben angegeben haben, im Grunde die notwendige Konvertierung von kartesischen in sphärische Koordinaten? Empfehlen Sie auch immer noch, Pandas zum Einlesen der Excel-Datei zu verwenden, oder gibt es einen besseren Weg in der Astropie?
Der Beispielcode berechnet den Abstand zwischen zwei Punkten, die in sphärischen Polarkoordinaten angegeben sind. Die Punkte sind (10*,9*,10parsec) und (11*, 10*, 11,5parsec). Ich kenne das genaue Format Ihrer Excel-Dateien nicht, aber das obige sollte ausreichen, um Ihnen den Einstieg zu erleichtern. Astropy kann keine Excel-Dateien lesen, also wenn Pandas für Sie funktioniert, verwenden Sie es.
Also, was ich bei einer schnellen Suche herausgefunden habe, ist, dass pandas keine multidimensionalen Tabellen handhaben kann, also bin ich jetzt ein wenig entmutigt, dass mein gesamter Code ausgeschaltet ist. Aber ich werde weiter einstecken, gibt es eine bessere Option als Pandas, um Daten aus mehreren Tabellen in Astropie einzulesen und zu vergleichen, die ich verwenden kann, um diesen ersten Teil zum Laufen zu bringen?
Ich weiß nicht, wie Ihre Tabellen aussehen oder warum es zwei Arbeitsbücher gibt. Können Sie alle Ihre Daten in einer CSV-Datei speichern? Wie auch immer, dies wäre eine Stackoverflow-Frage, wenn Sie es nicht selbst zum Laufen bringen können
@JustinT Wie James sagt, sollte Ihre Frage zum Lesen von Dateien im Stapelüberlauf stehen, aber ich werde sagen, dass Sie verschiedene Formate für Ihre Datei in Betracht ziehen sollten. Legen Sie Ihre Daten in einer Textdatei ab (einfach wie Kopieren und Einfügen von Excel in eine Textdatei) und verwenden Sie etwas wie numpy.genfromtxt, um sie einzulesen.
@zephyr Danke für den Tipp! Auch JamesK Ich werde mich weiter in Astropie-Sachen umsehen, danke für einen Hinweis in die richtige Richtung!