前提
Pythonでウェーブレット解析をしたく、自前のデータを読み込ませたところ
実装中に以下のエラーメッセージが発生しました。
実現したいこと
- 参考サイトと同じように実行したい
https://heartstat.net/2021/05/08/python_wavelet/
発生している問題・エラーメッセージ
ValueError Traceback (most recent call last) Input In [3], in <cell line: 1>() ----> 1 plt.pcolormesh(t, frq, 10*np.log(np.abs(coef)), cmap='jet') 2 plt.colorbar() 3 plt.show() File D:\anaconda\envs\midi\lib\site-packages\matplotlib\pyplot.py:2691, in pcolormesh(alpha, norm, cmap, vmin, vmax, shading, antialiased, data, args, *kwargs) 2686 @_copy_docstring_and_deprecators(Axes.pcolormesh) 2687 def pcolormesh( 2688 args, alpha=None, norm=None, cmap=None, vmin=None, 2689 vmax=None, shading=None, antialiased=False, data=None, 2690 *kwargs): -> 2691 ret = gca().pcolormesh( 2692 args, alpha=alpha, norm=norm, cmap=cmap, vmin=vmin, 2693 vmax=vmax, shading=shading, antialiased=antialiased, 2694 *({"data": data} if data is not None else {}), **kwargs) 2695 sci(ret) 2696 return __ret File D:\anaconda\envs\midi\lib\site-packages\matplotlib_init_.py:1423, in _preprocess_data..inner(ax, data, args, *kwargs) 1420 @functools.wraps(func) 1421 def inner(ax, args, data=None, *kwargs): 1422 if data is None: -> 1423 return func(ax, map(sanitize_sequence, args), *kwargs) 1425 bound = new_sig.bind(ax, args, *kwargs) 1426 auto_label = (bound.arguments.get(label_namer) 1427 or bound.kwargs.get(label_namer)) File D:\anaconda\envs\midi\lib\site-packages\matplotlib\axes_axes.py:6133, in Axes.pcolormesh(self, alpha, norm, cmap, vmin, vmax, shading, antialiased, args, *kwargs) 6130 shading = shading.lower() 6131 kwargs.setdefault('edgecolors', 'none') -> 6133 X, Y, C, shading = self._pcolorargs('pcolormesh', *args, 6134 shading=shading, kwargs=kwargs) 6135 coords = np.stack([X, Y], axis=-1) 6136 # convert to one dimensional array File D:\anaconda\envs\midi\lib\site-packages\matplotlib\axes_axes.py:5636, in Axes._pcolorargs(self, funcname, shading, args, *kwargs) 5634 if isinstance(Y, np.ma.core.MaskedArray): 5635 Y = Y.data -> 5636 nrows, ncols = C.shape 5637 else: 5638 raise TypeError(f'{funcname}() takes 1 or 3 positional arguments ' 5639 f'but {len(args)} were given') ValueError: too many values to unpack (expected 2)
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3import pywt 4import librosa 5 6if __name__ == "__main__": 7 wave, fs = librosa.load("./a2.mp3", sr=None, mono=False) 8 wavelet_type = 'cmor1.5-1.0' 9 scale = np.arange(1,257) 10 coef, _ = pywt.cwt(wave, scales=scale, wavelet=wavelet_type) 11 t = np.arange(len(wave))/fs 12 frq = pywt.scale2frequency(scale=scale, wavelet=wavelet_type)*fs 13 plt.pcolormesh(t, frq, 10*np.log(np.abs(coef)), cmap='jet') 14 plt.colorbar() 15 plt.show() 16 plt.close()
試したこと
エラーからarray配列のサイズがあってないような感じだったので、確認しました。
python
1wave, fs = librosa.load("./a.wav", sr=None, mono=False) 2np.set_printoptions(threshold=np.inf) 3print(wave.shape) --> (2, 9895555) 4 5wave, fs = librosa.load("./saa.wav", sr=None, mono=False) 6np.set_printoptions(threshold=np.inf) 7print(wave.shape) --> (220500,)
これが原因のような気がするのですが、なぜ同じファイル形式なのに、サイズが違うのでしょうか?(片方は自前でもう一つは参考サイトのものです。)
補足情報(FW/ツールのバージョンなど)
anaconda(python=3.9.12)
> print(wave.shape) --> (2, 9895555)
> print(wave.shape) --> (220500,)
前者はステレオ(左右の2チャンネル)で、後者はモノラルだからではないですかね
回答1件
あなたの回答
tips
プレビュー