Çok büyük bir 3D sayısal dizi skaler değerlerim var (eğer yapmanız gerekiyorsa OK "bir ses"). Düzgün bir skalar alanı üzerinde, düzensiz bir şekilde, bilinen tümleşik integral olmayan xyz koordinatlarının ardı ardına enterpolasyon yapmak istiyorum.Bir scipy interpolant gradyanı doğrudan nasıl elde edilir?
için buŞimdi scipy destek sadece mükemmel: I
filtered_volume = scipy.ndimage.interpolation.spline_filter(volume)
ile ses filtre ve görünüşe göre iyi davrandığını elde etmek için ilgi (x, y, z) için
scipy.ndimage.interpolation.map_coordinates(
filtered_volume,
[[z],[y],[x]],
prefilter=False)
çağırmak (pürüzsüz vb) enterpolasyonlu değerler. Şimdiye kadar çok iyi. Bununla birlikte, başvurum da enterpolasyonlu alanın yerel türevlerine ihtiyaç duyuyor. Şu anda bunları merkezi-farklılaştırma ile elde ediyorum: Ayrıca hacmi 6 ek noktada (bu en azından map_coordinates
'a sadece bir çağrı ile yapılabilir) ve örneğin (i(x+h,y,z)-i(x-h,y,z))/(2*h)
'dan x türevini hesapladım. (Evet biliyorum 3 tane ek musluk sayısını azaltmak ve "tek taraflı" farklılıklar yapmak olabilir, ama asimetri beni rahatsız eder.)
Benim içgüdüm degrade elde etmek için daha doğrudan bir yol olmalı ancak Schati uygulamasının bağırsaklarında neyin devam ettiğini anlamak için yeterince spline matematik (henüz) bilmiyorum (0): scipy/scipy/ndimage/src/ni_interpolation.c
.
Degradelerimi "daha doğrudan" merkezi farklılaştırmadan elde etmenin daha iyi bir yolu var mı? Tercihen, Scipy'nin gizemlerini kesmek yerine mevcut işlevselliği kullanarak elde edilmelerini sağlayan bir tanesi.
Harika soru! 'Filter_volume' içindeki spline katsayılarından gradyanı elde etmek için oldukça yalın olmalıyım, ama korkarım ki sizden tam olarak nasıl daha iyi bir fikrim yok. Sormak isteyebilirsiniz scipy posta listesinde de. –