Взаимодействие питона и Origin lab
Как можно а) с помощью astropy перевести координаты из формата hh mm ss в другую систему координат, и отобразить это всё в Origin Lab?
Ответы (1 шт):
Перевод из формата ra: hh mm ss; dec: deg mm ss:
import pandas as pd
import astropy as ap
import numpy as np
from astropy import units as u
from astropy.coordinates import SkyCoord
df = pd.read_csv('WD.csv')
ra1 = df['icrsra'] #прямое восхождение
dec1 = df['icrsdec'] #склонение
ra2 = ['']*len(ra1)
dec2 = ['']*len(ra1)
for i in range(len(ra1)):
if not pd.isnull(ra1[i]) and not pd.isnull(dec1[i]): # это убирает пустые значения, по необходимости можно изменить/убрать
k = ra1[i]
k = k.split()
ra2[i] = float(k[0])*15+float(k[1])/4+float(k[2])/4/60
k = dec1[i].split(' ')
dec2[i] = float(k[0])+float(k[1])/60+float(k[2])/3600
else: # ненужные, при необходимости изменить
ra2[i] = 0
dec2[i] = 0
c = SkyCoord(ra2*u.degree,dec2*u.degree, frame = 'icrs')
В итоге получаем c как скайкоорд. Это неплохо перевести в нормальный формат:
sky_coords = []
for i in range(len(c)):
sky_coords.append([c[i].l.degree,c[i].b.degree])
sky_coords в итоге обычный список списков вида [l, b]
my_df = pd.DataFrame(mylist, columns=['col1'])
my_df.to_csv('out33.csv')
Это для вывода списка в отдельный файл
Теперь ориджин. Базовая def f(x):
function double Sos(double m, double q)
{
double sum;
double fx;
sum = 0;
for(i = 1; i<45; i=i+1)
{
fx = 2.7255*(1+wcol(1)[i]);
sum = sum + (wcol(2)[i]-fx)^2/(wcol(3)[i])^2;
}
return sum;
}
Применим:
wcol(7)[7] = Sos(0.03,0.2)
Циклы for(здесь вложенные) если цикл не работает, то проверь что после for(mi=4;mi<42;mi=mi+1) НЕТ ТОЧКИ С ЗАПЯТОЙ:
for(mi = 4; mi<42; mi=mi+1)
{ m = (mi-1)/100;
for(qi = 20; qi<41; qi=qi+1)
{
q = qi/100;
wcol(mi)[qi] = Sos(m,q);
}
}
Пример if-а:
for(i = 1; i<250; i=i+1)
{
if (wcol(8)[i]>365)
{wcol(8)[i] = wcol(8)[i] - 365;};
else
{ };
}
СТРОКИ
Ввод переменных: символ ' НЕ ПОДХОДИТ, ТОЛЬКО "
wcol(7)[7]$ = "privet";
string y$ = "poka";
Работа со строками:
wcol(7)[7]$ = y$ + "privet";
А это позволит wcol[1][899] быть нормальным: (иначе оно как текст, будет wcol(z)[k]$*6)
wcol(1)[899] = wcol(z)[k]$*6;
С условиями всё норм работает:
if (wcol(1)[1]$ == "2023-May-08")
{
wcol(7)[9] = 1;
}