الفلك

Specutils Gaussian1D مجرب ومقدرات

Specutils Gaussian1D مجرب ومقدرات

أنا أقوم بتشغيل "المثال البسيط" من specutils للقيام ببعض تركيب الأسطر.

الكود التجريبي موجود هنا:

https://specutils.readthedocs.io/en/stable/fitting.html

هذا يعمل ويفعل ما يقول.

ومع ذلك ، أريد استخدام تقدير المعلمة للحصول على تقريب للمعلمات الأولية في Gaussian ، لأنني مهتم بالنظر في عدد من الأطياف الطويلة مع الكثير من الخطوط وأريد تجربة النوبات الأولية تلقائيًا.

لذلك أقوم بتعديل استيراد specutils.fitting إلى

من specutils.fitting استيراد fit_lines ، تقدير_خط_المعلمات

وإضافة في

e1 = معلمات_خط_تقدير (الطيف ، النماذج.Gaussian1D ()) أ = الجولة (e1.amplitude.value، 2) b = round (e1.fwhm.value، 2) c = round (e1.stddev.value، 2)

هذا يعطي قيمًا ذات مغزى وأنا أستبدل الدعوة إلى Gaussian بـ:

g_init = الطرز.Gaussian1D (السعة = a * u.Jy ، المتوسط ​​= b * u.um ، stddev = c * u.um)

ومن بعد

g_fit = fit_lines (طيف ، g_init) y_fit = g_fit (x * u.um)

القيم الأولية التي أحصل عليها من المقدر هي:

السعة الأولية = 3.35 fwhm الأولي = 2.41 stddev الأولي = 1.02

ولكن عند النظر إلى معلمات الإخراج باستخدام g_fit.amplitude.value وما إلى ذلك ، أحصل على:

السعة النهائية = -0.24 Jy final fwhm = 0.0 um نهائي stddev = 0.0 um

لقيم الإخراج !! إذا كانت المقدرات صحيحة ، فيجب أن تكون قيم المخرجات قريبة جدًا.

هل هناك مشكلة في استخدام المقدرات مثل هذا؟

FWIW أقوم بتشغيل matplotlib 3.2.2 و specutils 1.0 و numpy 1.19 و python 3.6 على Ubuntu 19.10


مسودة واجهة برمجة التطبيقات لتقدير النموذج رقم 13

مشروع GSoC 2015 لتنفيذ تقييم صورة النموذج الفعال ووظيفة التنقيط في Astropy. الموجهون همadonath و @ cdeil. هذه مسودة أولية لواجهة برمجة التطبيقات المقترحة لمناقشات المجتمع وإدخالاته. يجب على الأشخاص المهتمين الانضمام إلى المناقشة القادمة عبر Google Hangout (استطلاع رسومات الشعار المبتكرة).

convolved_model = ConvolvedModel (مصدر، psf)

# هل يجب أن يكون هناك Convolved1DModel و Convolved2DModel؟
# هل يجب أن يكون هذا امتدادًا لفئة CompoundModel؟

احتضان 18 مايو 2015

ربما ليس بالضبط - فئة CompoundModel مخصصة خصيصًا للتعامل مع النماذج التي تتكون من عدة نماذج تم دمجها مع عوامل حسابية و / أو تكوين. بعد قولي هذا ، يمكنني أن أفهم لماذا تقترح ذلك هنا ، نظرًا لأنك تقوم أساسًا بتحديث نموذج المصدر مع بعض نواة الالتواء ، لذلك بهذا المعنى تقوم بتكوين نموذج المصدر باستخدام عامل الالتفاف.

لذا فإن الطريقة التي تحدثنا بها أنا و Perry عن القيام بذلك هي بدلاً من إنشاء نموذج Convolved يأخذ المصدر كحجة ، كما هو مقترح هنا ، قد يكون هناك بعض نماذج ConvolutionM يتم إنشاء مثيل لها فقط مع النواة المطلوبة ثم يتم تشغيل نموذج مصدر من خلالها مثل:

سيتطلب ذلك أن يتجاوز نموذج ConvolutionModel كيفية تنفيذ مشغل الأنبوب للنماذج ، نظرًا لأن له معنى مختلفًا قليلاً عما هو عليه في النماذج المركبة العادية. في النماذج المركبة العادية ، model_1 | يعني model_2 "تمرير إخراج model_1 كمدخل إلى model_2". ومع ذلك ، في هذه الحالة ، يكون المدخل إلى نموذج الالتواء هو بأكمله نموذج على LHS (بالإضافة إلى مدخلاته ، إذا كان ذلك منطقيًا). أعتقد أنه يمكن بالتأكيد دعم هذه الحالة الخاصة. تحدثنا مؤخرًا عن هذا ، وقلت إنني سأقوم بإعداد نموذج أولي ولكن لم تتح لي الفرصة. يمكنني أن أريكم أكثر بالضبط ما أعنيه لاحقًا إذا كان هذا يبدو ممتعًا.

ومع ذلك ، إذا لم ينجح المخطط الذي أقترحه ، فيمكن جعل شيء مثل المثال أعلاه يعمل أيضًا. أنا فقط أحب المصدر | مخطط الالتفاف لأنه يتناسب بشكل أفضل بشكل عام مع البنية الحالية للنماذج المركبة :)

بيريغرينفيلد 18 مايو 2015

بالنسبة لي ، ما يعنيه عامل الالتفاف في هذا السياق هو أن شكل نموذج الإدخال يجب أن يُعاد كمجموعة عينات منتظمة من القيم (بحث عن جدول فعال) بحيث يمكن تطبيق الالتواء المنفصل. على سبيل المثال ، إذا كان نموذج الإدخال تحليليًا بحتًا (أو حتى بحث الجدول على شبكة مختلفة ، أو شبكة غير منتظمة) ، فيجب تقييم النموذج على شبكة يمكن أن يستخدمها الملتف. في الواقع ، يجب أن يقوم المُحَلِّل بتحويل الإدخال إلى نموذج جدول بحث والعمل على ذلك. يحتاج الملتف إلى معلومات عن فاصل أخذ العينات والمدى المتوقع أن يتعامل معه ، ويستخدم ذلك لتقييم المدخلات إلى ذلك. هل هناك طريقة أخرى للتعامل معها؟

# العودة إلى الفضاء العادي.
# 4.حيث أن الالتفاف هو عملية خطية فإن مشتق الالتفاف يتصرف مثله
# http://en.wikipedia.org/wiki/Convolution#Differentiation يمكن استخدام هذه العلاقة
# لتنفيذ أساليب "fit_deriv" ​​للنماذج الملتفة.

احتضان 18 مايو 2015

# دالة تكامل تأخذ الحدود العليا والسفلى للتكامل
# (راجع أيضًا https://github.com/astropy/astropy/issues/1586)
النموذج = Gaussian1D (1 ، 0 ، 1)
نموذج . دمج (0، np. inf)

احتضان 18 مايو 2015

في الماضي ، كان هناك بعض الحجة القائلة بأنه بدلاً من أسلوب Model.integrate ، يجب أن يكون هناك نوع من وظيفة التكامل العامة () التي يمكن أن تأخذ النماذج كمدخلات ، من بين أنواع أخرى من الكائنات القابلة للاستدعاء. لا أذكر بالضبط ما كانت الحجة وراء ذلك (قد يكون لدىperrygreenfield بعض الأفكار). لكنني أعتقد أنه حتى لو سلكنا هذا الطريق ، سيكون من المنطقي أن يكون لدينا طرق تكامل نموذجية أيضًا ، إذا لم يكن هناك شيء آخر حتى تتمكن النماذج الفردية من تنفيذ التكاملات التحليلية حيثما أمكن ذلك (على الرغم من أنني أعتقد أنه لا يزال يجب أن تظل قادرة على العودة إلى تقنيات التكامل العددي).

بيريغرينفيلد 18 مايو 2015

الفكرة الرئيسية هي أنه يجب أن تعمل لأشياء أخرى دون إجبار المستخدم على تحويلها صراحة إلى نموذج. ومع ذلك ، يمكن للوظيفة القيام بذلك من وراء الكواليس.

اتيك 21 مايو 2015

لكنها ستكون كذلك الى ابعد حد مفيد للفئات الفرعية لتكون قادرة على تعريف التكاملات التحليلية عندما يكون ذلك منطقيًا. لذلك أعتقد أن طريقة الدمج هي خيار حاسم لبعض حالات استخدام النمذجة. (وبالمثل ، فإن المشتق هو ليس نفس مشتق w.r.t. المعلمات ، أي fit_deriv الحالي)

أدونات 22 مايو 2015

كما قالeteq ، فإن الفكرة الرئيسية هي أن الفئات الفرعية يمكنها تحديد التكاملات التحليلية أو حلول محددة ذكية للتكامل (بالنسبة إلى Gaussian ، راجع https://github.com/astropy/photutils/blob/master/photutils/psf.py#L252 ). في الوقت الحالي ، لا أرى الحاجة إلى وظيفة تكامل إضافية () ، لأن هناك scipy.integrate ، والتي يمكنها التعامل مع أي قابل للاستدعاء.

# لنماذج 2d سيكون
y_lo = np. أرينج (- 10 ، 11) - 0.5
y_hi = np. أرينج (- 10 ، 11) + 0.5
نموذج . دمج ((x_lo ، x_hi ، y_lo ، y_hi))

احتضان 18 مايو 2015

قد أفضل هنا أنه بالنسبة لنماذج N-D ، سيكون هناك وسيطات N bounds ، كل منها منفصل (lo ، hi) 2-tuple.
كيف يعمل هذا للناقلات / المسارات؟ أم أن هذا لا يتم النظر فيه في الوقت الحالي؟

أدونات 22 مايو 2015

أوافق ، يجب تصميم واجهة برمجة التطبيقات لنماذج N-D. فيما يتعلق بتكاملات المتجهات / المسار ، لست متأكدًا مما إذا كانت هناك طريقة بسيطة للتعامل مع ذلك. يشير بناء الجملة (x_lo، x_hi، y_lo، y_hi) إلى تكامل على طول المحور السيني والمحور الصادي فوق منطقة مستطيلة (أو بكسل) ، والتي قد تكون حالة الاستخدام الأكثر شيوعًا فقط. هناك حالة استخدام أخرى لـcdeil وأنا ناقشناها وهي شبكات healpix (حيث لا تكون البكسلات مستطيلة بالضرورة). لذلك أعتقد أن الأمر يستحق التفكير في نهج أكثر عمومية. على سبيل المثال يمكن للمرء فقط اجتياز مركز البكسل وتعريف المنطقة ، حيث يجب دمج النموذج ، ولكن هذا سيصبح معقدًا للغاية بسرعة ، لأنه قد لا تكون هناك حلول تحليلية بعد الآن.

كديل 28 مايو 2015

أحد الأسئلة المهمة هو كيفية التقييم والتكامل أخذ مدخلاتهم.
في الوقت الحالي ، يأخذ التقييم x لـ 1D و x ، y كوسيطتين منفصلتين للثنائي الأبعاد ، ولست متأكدًا من كيفية القيام بذلك مع الأبعاد الثلاثية أو الكثافة الطبيعية.

لدمج اقتراح واجهة برمجة التطبيقات هذا يأخذ في الغالب وسيطة موضعية واحدة (مجموعة) كمدخل ، أي هل تختلف عن التقييم. لاحظ أن طرق التقييم مثل في scipy.interpolate ، خذ أيضًا وسيطة منفردة و xi لـ ND ، انظر هنا للحصول على مثال: http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

ما الذي نريده للتقييم والتكامل في نماذج Astropy؟
هل تغيير توقيع التقييم مطروح للمناقشة في هذه المرحلة؟

كديل 28 مايو 2015

لاحظ هذه العلاقات العامة و dicussion في numpy كيف يتم إنشاء الشبكات الديكارتية: numpy / numpy # 5874
(أعتقد أن هذا هو تنسيق الإدخال لوظائف scipy.interpolate ، لكن هذا التنسيق غير مستخدم في Astropy ، أليس كذلك؟)

# على سبيل المثال من scipy.integrate
# يمكن تمرير وضع التكامل إلى طريقة الدمج إذا لم يكن ملف
# سمة للنموذج
نموذج . دمج ((x_lo ، x_hi ، y_lo ، y_hi) ، الوضع = & # 39 تكامل & # 39)

احتضان 18 مايو 2015

النموذج = Gaussian1D (1، 0، 1، mode = & # 39center & # 39)
النموذج = Gaussian1D (1 ، 0 ، 1 ، الوضع = & # 39 Linear_interp & # 39)
النموذج = Gaussian1D (1 ، 0 ، 1 ، الوضع = & # 39 Integrate & # 39)
النموذج = Gaussian1D (1، 0، 1، mode = & # 39oversample & # 39، factor = 10)

احتضان 18 مايو 2015

هل يمكن أن تشرح قليلا عن هذا؟ ما الذي ينطبق عليه "الوضع" و "العامل" عند إنشاء مثيل لنموذج؟

أدونات 22 مايو 2015

هذا مجرد خيار للراحة. الفكرة هي أن وسيطة "الوضع" تحدد طريقة التقييم الخاصة بالنموذج. لذا فإن الوضع = 'center' يتوافق مع ما تم إنجازه الآن ، يتم تقييم النموذج للتو في مركز البكسل. الوضع = "العينة الزائدة" سيستخدم الاختزال المفرط لتقييم النموذج وما إلى ذلك. المشكلة هي أن هذا يعمل فقط بسهولة لإحداثيات البكسل والشبكات المنتظمة ، وإلا فإن النموذج يحتاج إلى معرفة حجم العينة (الذي يرتبط بتعريف api لـ. دمج () طريقة)

# هذا مفيد جدًا لنمذجة المصادر ، لأن معلمة السعة إذن
# يتوافق مع التدفق الكلي للمصدر.
النموذج = Gaussian2D (1 ، 0 ، 0 ، 1 ، 1 ، التطبيع = & # 39peak & # 39)
النموذج = Gaussian2D (1 ، 0 ، 0 ، 1 ، 1 ، التطبيع = & # 39integral & # 39)

احتضان 18 مايو 2015

سيتعين علينا التفكير في كيفية تنفيذ ذلك في إطار تنفيذ النموذج الحالي ، ولكن - من حيث المبدأ. توضح الأمثلة أعلاه النماذج التي يتم إنشاء مثيل لها بالسعة = 1. هل سيتم تجاوز هذا بطريقة ما؟ ماذا سيعود model.amplitude؟

قد تكون هذه أيضًا حالة لشيء فكرت فيه من قبل ، لحالات استخدام أخرى ، للنماذج "الجزئية" التي تم إنشاء مثيل لها بدون قيم محددة مسبقًا لجميع معلماتها. في الحالة العامة للنماذج "الجزئية" ، يجب تقديم أي معلمات غير محددة في وقت التقييم. ومع ذلك ، في حالة النموذج الطبيعي ، قد تترك السعة غير محددة.

أو في غضون ذلك ، يمكنك فقط تحديد سعة افتراضية كما في الأمثلة أعلاه ، ولكن لا يزال بإمكانك تسوية الإخراج وهو أمر جيد.

أدونات 22 مايو 2015

سيكون الحل الأسهل هو تحديد طريقة تقييم ثانية ، حيث تتوافق معلمة السعة مع التكامل على النموذج وليس مع قيمة الذروة (هكذا تم ذلك هنا: https://gammapy.readthedocs.org/en/latest /api/gammapy.morphology.Shell2D.html#gammapy.morphology.Shell2D). يتطلب هذا توثيقًا تفصيليًا لهذا السلوك. خيار ثانٍ (ربما يكون أكثر أناقة)
سيكون تقديم نموذج متغير متكامل ، والذي يرتبط ببعض الوظائف بمعامل النموذج. يجب تحديد معلمة السعة (المقيد والثابت في المقابل). لا تقتصر ميزة النماذج المقيسة على الحصول على التكامل الكلي (أو التدفق لنماذج المصدر.) للنموذج فحسب ، بل تتعلق أيضًا بأن المعلمات التي تستخدم التكامل كمعامل اتساع عادةً ما تكون أكثر استقرارًا في الملاءمة (على سبيل المثال لـ Gaussian A * exp (- (x / sigma) ** 2) مقابل A / sqrt (2 * pi * sigma ** 2) exp (- (x / sigma) ** 2))

النموذج = Gaussian2D (1 ، 0 ، 0 ، 1 ، 1 ، التطبيع = & # 39integral & # 39)

# بدلاً من ذلك ، يمكن للمرء تقديم NormGaussian2D الجديد ، NormBox2D ،. النماذج ، ولكن ذلك
# من المحتمل أن يكون هناك الكثير من تكرار الكود؟

احتضان 18 مايو 2015

المحتمل. تعجبني فكرة دمج التطبيع في النماذج بطريقة ما (مع التنبيه إلى أنه لن يكون منطقيًا لجميع النماذج).

# نموذج & # 39s معلمات العرض. يمكن أن يقتصر تقييم النموذج لاحقًا على المنطقة المحددة
# من خلال "مدى" لأداء أفضل
Gaussian2D. المدى = ديكت (س = 5 * x_stddev ، ص = 5 * y_stddev)
Disk2D. المدى = ديكت (س = R_0 ، ص = R_0)

احتضان 18 مايو 2015

هذا الجانب هو شيء أجده صعبًا بعض الشيء ، لأنه بينما يجب أن يكون المرء قادرًا على التوصل إلى بعض الإعدادات الافتراضية المعقولة ، قد يرغب المستخدمون أيضًا في تخصيص هذا ، وسيختلف التنفيذ الدقيق لهذا من نموذج إلى آخر.

اتيك 21 مايو 2015

أتفق معembray أن هذا يبدو خطيرًا تطلب

كديل 21 مايو 2015

+1 لوجوده اختياري. إذا لم يكن موجودًا ، فسيتم تقييم النموذج افتراضيًا على الصورة بأكملها.

أدونات 22 مايو 2015

نعم ، يجب أن يكون اختياريًا بالتأكيد ، لاحظ أن هذا مرتبط أيضًا بالنجمة الفلكية / الفلكية # 2190.
سأفكر في طريقة عامة في كيفية العثور على القيم الافتراضية المناسبة.


شاهد الفيديو: How to Deconvolute Peaks In Origin (شهر اكتوبر 2021).