Une histoire remplie de valeurs absolues de numpy.ndarray

Récemment, j'ai fait une petite opération sur des fichiers audio.

En référence à cette page, je l'ai lu comme un entier de type 16 bits `` numpy.ndarray ''.

Afficher la forme d'onde sonore en Python (fichier Wav)

import numpy as np
import wave

def read_wavefile(filename):
    """fichier au format wav numpy.Lire comme ndarray"""
    wf = wave.open(filename , 'r')
    buf = wf.readframes(wf.getnframes())
    #Convertir les données binaires en entier 16 bits
    return np.frombuffer(buf, dtype='int16')

Je voulais prendre la valeur absolue de cette voix, je vais donc convertir le tableau avec numpy.absolute```.

arr = read_wavefile('test.wav')
arr_abs = np.absolute(arr)

Cependant, la valeur -32768 '' dans celle-ci reste sans être convertie en valeur positive. Si vous prenez l'histogramme, vous pouvez voir que les autres valeurs négatives sont positives, mais qu'il ne reste que -32768 '' (bien que les valeurs soient correctes).

import matplotlib.pyplot as plt

print(type(arr_abs))
# => <class 'numpy.ndarray'>

print(arr_abs.min())
# => -32768

plt.hist(np.absolute(arr), bins=100)
plt.show()

ダウンロード (2).png

solution de contournement

Cela a été résolu en lisant comme un entier 32 bits lors de la première lecture.

def read_wavefile(filename):
    """fichier au format wav numpy.Lire comme ndarray"""
    wf = wave.open(filename , 'r')
    buf = wf.readframes(wf.getnframes())
    #Convertir les données binaires en entier 32 bits
    arr = np.frombuffer(buf, dtype='int16')
    return arr.astype(np.int32)

arr = read_wavefile('test.wav')
arr_abs = np.absolute(arr)
print(arr_abs.min())
# => 0

C'est probablement parce que les entiers 16 bits ne peuvent représenter que de -32768 à 32767, donc numpy.absolue Je pense que la valeur obtenue en convertissant le code avec `ne peut pas être convertie et la valeur telle qu'elle est est sortie.

(Je n'ai trouvé aucune documentation détaillant ces spécifications)

Lors de l'utilisation de programmes de calcul numérique tels que le langage numpy et R de Python, il est souvent reconnu que le type de données du langage C est utilisé tel quel pour accélérer, il est donc nécessaire d'être plus prudent que d'habitude. Fait.

À propos, la version de `` numpy``` utilisée cette fois est la 1.13.0.

$ pip freeze | grep numpy
numpy==1.13.0

Recommended Posts

Une histoire remplie de valeurs absolues de numpy.ndarray
Une histoire de compétition avec un ami dans Othello AI Preparation
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
[Petite histoire] Comment enregistrer des graphiques matplotlib dans un lot avec Jupyter
Remplissez les valeurs manquantes avec Scikit-learn impute
Un mémo rempli de construction d'environnement RADEX
Une histoire déroutante avec deux façons d'implémenter XGBoost en Python + notes générales
[Python] Récupérez les fichiers dans le dossier avec Python
Dessinez un graphique avec des étiquettes japonaises dans Jupyter
[Python3] Une histoire bloquée avec la conversion du fuseau horaire
Supprimer des données dans un modèle avec Redis Cluster
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créer un environnement virtuel avec conda avec Python
Supprimer les lignes avec des valeurs arbitraires dans pandas DataFrame
Créez un environnement Django avec Vagrant en 5 minutes
Une histoire sur la gestion des données binaires en Python
Cloner avec une branche / balise spécifique dans GitPython
Une histoire sur l'implémentation d'un écran de connexion avec django
Travaillez dans un environnement virtuel avec Python virtualenv.
Créer une nouvelle page en confluence avec Python
Gérer les types entiers avec des valeurs manquantes dans Pandas
Configurer un module avec plusieurs fichiers dans Django
L'histoire qui s'inscrit dans l'installation de pip
Comment convertir / restaurer une chaîne avec [] en python
Histoire de l'utilisation du jeton logiciel de Resona avec 1Password
Une histoire de prédiction du taux de change avec Deep Learning
Je veux faire la transition avec un bouton sur le ballon
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Jouer avec l'API d'intelligence artificielle locale de l'utilisateur en Python
Créez un Slackbot simple avec un bouton interactif en python
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Dessiner une structure arborescente avec D3.js dans Jupyter Notebook
L'histoire de la création d'une partition de type Hanon avec Python
Une histoire d'essayer un monorepo (Golang +) Python avec Bazel
Je veux travailler avec un robot en python.
Le point addictif du "raisonnement de Bayes expérimenté en Python"
Une histoire qui reflète l'activité Discord dans Slack Status
Sortie d'une chaîne avec des sauts de ligne dans PyYAML
L'histoire de la gestion de theano avec TSUBAME 2.0
Une histoire liée à Google Cloud Storage avec un peu d'ingéniosité
Une histoire sur un débutant Linux passant LPIC101 en une semaine
Afficher un histogramme des valeurs de luminosité de l'image en python
Impossible de manipuler l'iframe dans la page avec Selenium
Exécuter un fichier Python avec une importation relative dans PyCharm
Créez un faux serveur Minecraft en Python avec Quarry
Arrêter une instance avec une balise spécifique dans Boto3
Une histoire qui a disparu quand j'ai spécifié un chemin commençant par tilda (~) en python open
[Note] Une histoire sur la tentative de remplacer une méthode de classe avec deux barres inférieures dans la série Python 3.
Apprentissage automatique Une histoire sur des personnes qui ne sont pas familiarisées avec GBDT utilisant GBDT en Python
[Django] Une histoire sur le fait de rester coincé dans un marais en essayant de valider un zip avec un formulaire [TDD]