Handle all-NaN channels in calc_adc_params
Personne n'a encore pris cette issue.
- #571 par @Leonard013 — fermée sans fusion
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 48/100
Piste de recherche
Commencez dans wfdb/io/_signal.py, au niveau de calc_adc_params, et suivez la gestion de nanmin/nanmax utilisée par wfdb.wrsamp. Reproduisez l’exemple d’un canal contenant uniquement des valeurs NaN, puis vérifiez que les canaux contenant uniquement des valeurs NaN ne déclenchent plus d’avertissement et n’échouent plus, tandis que les canaux contenant des valeurs conservent leur comportement actuel.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Jupyter Notebook
- Étoiles
- 853
- Forks
- 323
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de MIT-LCP/wfdb-python
-
`find_local_peaks` ignores the sample at `i + radius`, so points on a rising slope are returned as peaksPeut-être pris @rmz-oz l’a pris il y a 17 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
MIT-LCP/wfdb-python#572 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
MIT-LCP/wfdb-python#568 ·
-
Add validation of segments when writing a `MultiRecord`Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 48/100
MIT-LCP/wfdb-python#557 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 58/100
MIT-LCP/wfdb-python#554 ·
-
WFDB path ignoredOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
MIT-LCP/wfdb-python#545 ·
Toutes les issues de MIT-LCP/wfdb-python
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
osmlab/name-suggestion-index#12992 ·
Les mainteneurs répondent en général sous 1 jour
-
unavailable - 2nd tier
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
MobilityData/mobility-database-catalogs#1759 ·
Les mainteneurs répondent en général sous 2 jours
-
Bug: Incorrect location coordinates on logged Sound Meter dataPeut-être pris @Jashan32 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
good first issue help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
hazeliscoding/conatlas-tx#33 ·
Les mainteneurs répondent en général sous 1 jour
-
Make manifestation a listOuverte
Difficulté 2/5 Une demi-journée Accessibilité débutants 72/100
nf-osi/nf-metadata-dictionary#1022 ·