Pre-stack modeling operator for multiple wavelets
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 30/100
Direzione di ricerca
Start at the pre-stack inversion operator’s explicit=False path and read how it constructs Convolve1D operators and combines them with BlockDiag; compare this with the dense multi-wavelet path shown in the issue. First focus on the stated 1D case, leaving 2D and 3D extension for later. Done means sparse results for multiple wavelets are consistent with the dense implementation.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
🛠 Multi-Wavelet Support in Pre-Stack Inversion Operator (explicit=False)
📖 Description
The convolution operator used by pylops for pre-stack inversion (explicit=False) is implemented using the Conv1D class. Currently, pylops supports only a single wavelet for all angles, meaning the inversion assumes the same wavelet for each angle.
I attempted to modify the code to allow a different wavelet for each angle (mid-angle in my case, as I’m using partial stacks). However, my current results are only consistent when using dense operators (explicit=True), whereas I would expect them to also work in the sparse case.
🔍 Observations
- ✅ The dense implementation (
explicit=True) behaves as expected. - ❌ The sparse implementation (
explicit=False) does not produce comparable results. - ⚠️ The issue seems related to how the
Conv1Doperator is built when handling multiple wavelets.
The code using Conv1D for multiple wavelets is only working for spatdims=1 at the moment, the idea is to extend for 2D or 3D cases when i adress this issue.
💡 Code Snippet
✅ Dense Implementation (Working)
# Handling multiple wavelets
if isinstance(wav, list):
print("Dense multi-wavelet operator")
n = len(wav)
C = np.zeros((n * nt0, n * nt0))
wsub_list = []
for w in wav:
wsub = np.asarray(convmtx(w, nt0, len(w) // 2)[:nt0])
wsub_list.append(wsub)
C = get_block_diag(theta)(*wsub_list)
else:
# Create wavelet operator
C = ncp.asarray(convmtx(wav, nt0, len(wav) // 2)[:nt0])
C = [C] * ntheta
C = get_block_diag(theta)(*C)
# Combine operators
M = ncp.dot(C, ncp.dot(G, D))
Preop = MatrixMult(M, otherdims=spatdims, dtype=dtype)
❌ Sparse implementation (Not-working)
else:
if isinstance(wav, list):
print("Dense multi-wavelet operator")
# Criar uma lista de operadores de convolução
Cop_list = []
for w in wav:
Cop = Convolve1D(
(nt0),
h=w,
offset=len(w) // 2, # Define o centro da wavelet
axis=0,
dtype='float32',
method='fft'
)
Cop_list.append(Cop.tosparse()) # Adiciona à lista de operadores'
Cop = BlockDiag(Cop_list)
else:
print("Sparse single wavelet operator")
# Create wavelet operator
Cop = Convolve1D(
dims,
h=wav,
offset=len(wav) // 2,
axis=0,
dtype=dtype,
)
- Lingua principale
- Python
- Stelle
- 539
- Fork
- 126
- Merge medio
- 2g 17h
- PR unite (30g)
- 21
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di PyLops/pylops
-
Lipschitz methodForse già presa @Megumi1773 l’ha presa 26 giorni fa. Apertaenhancement good first issue
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 2 giorni
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
PyLops/pylops#786 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
CI
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
I maintainer di solito rispondono entro 2 giorni
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
I maintainer di solito rispondono entro 2 giorni
-
Introduce spell checkingAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 38/100
PyLops/pylops#731 · 4 commenti · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di PyLops/pylops
Issue simili
-
New InternshipApertanew_internship
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
get_graph warns that the oneway column is missing when no way has a oneway tagForse già presa @HTenkanen l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
cython/cython#8110 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
fix: security 🔐 style: article/section 📝 system: data-mgmt 🗃️ system: security 🔐 system: software 💻
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
uabrc/uabrc.github.io#1267 ·
-
Link Checker ReportApertaBot Type: Bug Type: Documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno