создать двумерный массив из коэффициентов вейвлетов, используя python - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно создать 2D массив, похожий на рисунок ниже, используя коэффициенты деталей вейвлет-преобразования. Более двух недель я пытаюсь найти, как я могу это сделать.

enter image description here

На этом графике представлены коэффициенты детализации вейвлет-преобразования на разных уровнях (1, 2, 3 , 4 и 5). Коэффициенты детализации (cA5, cD5, cD4, cD3, cD2, cD1 = coeffs) представляют собой одномерный массив, каждый из которых имеет разный размер. Я хочу создать 2D-массив, похожий на изображение, используя вейвлет-коэффициенты, как я могу это сделать?

coeffs = wavedec(data, 'sym5', level=5)
    cA5,cD5,cD4,cD3,cD2,cD1=coeffs    
    for i, ci in enumerate(coeffs):
        plt.imshow(ci.reshape(1, -1), extent=[0, 2000, i + 0.5, i + 1.5], cmap='inferno', aspect='auto', interpolation='nearest')
    plt.ylim(0.5, len(coeffs) + 0.5) 
    plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
    plt.show()

1 Ответ

1 голос
/ 01 апреля 2020

Ответ проще, чем вы могли подумать.

Просто выньте plt.show() из вашего for l oop:

import pywt
import numpy as np
import matplotlib.pyplot as plt
data=np.random.rand(4000)
coeffs = pywt.wavedec(data, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs    
for i, ci in enumerate(coeffs):
    plt.imshow(ci.reshape(1, -1), extent=[0, 2000, i + 0.5, i + 1.5],     cmap='inferno', aspect='auto', interpolation='nearest')
    plt.ylim(0.5, len(coeffs) + 0.5) 
    plt.yticks(range(1, len(coeffs) + 1), ['cA5', 'cD5', 'cD4', 'cD3', 'cD2', 'cD1'])
plt.show()

Это позволит вам обновить Ваша фигура:

enter image description here


РЕДАКТИРОВАТЬ:

Если вы оставите plt.show() в л oop, он предоставит отдельные графики для каждого коэффициента, например, приведенного ниже:

enter image description here

Ссылаясь на это введение в matplotlib :

Следует помнить одну вещь: команду plt.show () следует использовать только один раз за сеанс Python, и чаще всего ее можно увидеть в самом конце скрипта. Многочисленные команды show () могут привести к непредсказуемому поведению, зависящему от бэкэнда, и в большинстве случаев их следует избегать.

...