Handle all-NaN channels in calc_adc_params
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 48/100
Línea de trabajo
Comienza en wfdb/io/_signal.py, en calc_adc_params, y sigue el manejo de nanmin/nanmax utilizado por wfdb.wrsamp. Reproduce el ejemplo de un canal con todos sus valores en NaN y, después, verifica que los canales con todos sus valores en NaN ya no generen una advertencia ni fallen, mientras que los canales que contienen valores conserven su comportamiento actual.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Jupyter Notebook
- Estrellas
- 853
- Forks
- 322
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MIT-LCP/wfdb-python
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
MIT-LCP/wfdb-python#568 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
MIT-LCP/wfdb-python#557 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 58/100
MIT-LCP/wfdb-python#554 ·
-
WFDB path ignored Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
MIT-LCP/wfdb-python#545 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
MIT-LCP/wfdb-python#540 ·
Todos los issues de MIT-LCP/wfdb-python
Issues similares
-
bug triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
fivetran/great_expectations#12253 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
correction metadata
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
acl-org/acl-anthology#10071 · 1 comentario ·
-
data:css needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
mdn/browser-compat-data#30618 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
basedosdados/pipelines#2095 ·