Handle all-NaN channels in calc_adc_params
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia in wfdb/io/_signal.py, in calc_adc_params, e segui la gestione di nanmin/nanmax utilizzata da wfdb.wrsamp. Riproduci l'esempio di un canale contenente solo valori NaN, quindi verifica che i canali contenenti solo valori NaN non generino più un avviso né falliscano, mentre i canali che contengono valori mantengano il comportamento esistente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
If all samples in a channel are NaN, calc_adc_params will fail:
>>> wfdb.wrsamp("xxx", fs=500, units=["mV"], sig_name=["I"], p_signal=numpy.array([[numpy.nan]]), fmt=["16"])
/home/bmoody/work/wfdb-python/wfdb/io/_signal.py:740: RuntimeWarning: All-NaN slice encountered
minvals = np.nanmin(self.p_signal, axis=0)
/home/bmoody/work/wfdb-python/wfdb/io/_signal.py:741: RuntimeWarning: All-NaN slice encountered
maxvals = np.nanmax(self.p_signal, axis=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/bmoody/work/wfdb-python/wfdb/io/record.py", line 2943, in wrsamp
record.set_d_features(do_adc=1)
File "/home/bmoody/work/wfdb-python/wfdb/io/_signal.py", line 470, in set_d_features
self.adc_gain, self.baseline = self.calc_adc_params()
File "/home/bmoody/work/wfdb-python/wfdb/io/_signal.py", line 787, in calc_adc_params
baseline = int(np.floor(baseline))
ValueError: cannot convert float NaN to integer
A couple things are wrong here:
-
if pmin == np.nandoesn't do what you think. -
nanminandnanmaxwill give a RuntimeWarning if all samples in a channel are NaN.
(1) is easy to fix. (2) is a little weirder; have a look at the code of nanmin:
if type(a) is np.ndarray and a.dtype != np.object_:
# Fast, but not safe for subclasses of ndarray, or object arrays,
# which do not implement isnan (gh-9009), or fmin correctly (gh-8975)
res = np.fmin.reduce(a, axis=axis, out=out, **kwargs)
if np.isnan(res).any():
warnings.warn("All-NaN slice encountered", RuntimeWarning,
stacklevel=3)
In other words, for ordinary numeric numpy arrays, np.fmin.reduce gives what we want (minimum non-NaN value if there is one, otherwise NaN, and no warning.) It might not work if the array is something more exotic (e.g. a numpy-compatible array class created by some other python package.)
I think I understand the comment about object arrays (https://github.com/numpy/numpy/issues/8975, https://github.com/numpy/numpy/issues/9009), but I don't understand the "subclasses of ndarray" comment. When I try creating a trivial subclass of ndarray, fmin still appears to work as expected. So I don't see why the strict is np.ndarray is needed.
- Lingua principale
- Jupyter Notebook
- Stelle
- 853
- Fork
- 322
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
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 MIT-LCP/wfdb-python
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
MIT-LCP/wfdb-python#568 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
MIT-LCP/wfdb-python#557 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 58/100
MIT-LCP/wfdb-python#554 ·
-
WFDB path ignored Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
MIT-LCP/wfdb-python#545 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
MIT-LCP/wfdb-python#540 ·
Tutte le issue di MIT-LCP/wfdb-python
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
robjhyndman/forecast#1220 ·
-
Add: New Channel Apertachannels:add check:passed
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
-
good first issue help wanted NLnet
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
collective/icalendar#1819 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
confluentinc/dbt-confluent#160 ·
-
inceleme-kuyrugu
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Greater-Turkiye/platform#107 ·