TypeError: scatter () получил несколько значений для аргумента 'c' - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь выполнить иерархическую кластеризацию для моего массива MFCC 'signal_mfcc', который представляет собой массив с размерами (198, 12). 198 аудиокадров / наблюдение и 12 коэффициентов / измерений?

Я использую случайный порог «250» с «расстоянием» для критерия, как показано ниже:

    thresh = 250
    print(signal_mfcc.shape)
    clusters = hcluster.fclusterdata(signal_mfcc, thresh,    criterion="distance")

С указанным порогом выходная переменная 'cluster' представляет собой последовательность [1 1 1 ... 1] длиной 198 или (198,), которая, как я предполагаю, направляет все данные в один кластер. Затем я использую pyplot для построения scatter () со следующим кодом:

    # plotting
    print(*(signal_mfcc.T).shape)
    plt.scatter(*np.transpose(signal_mfcc), c=clusters)
    plt.axis("equal")
    title = "threshold: %f, number of clusters: %d" % (thresh) len(set(clusters)))
    plt.title(title)
    plt.show()

Вывод:

    plt.scatter(*np.transpose(signal_mfcc), c=clusters)
    TypeError: scatter() got multiple values for argument 'c'

Диаграмма рассеяния не будет отображаться. Какие-нибудь подсказки к тому, что могло пойти не так? Заранее спасибо!

1 Ответ

0 голосов
/ 26 апреля 2019

Из этой SO Thread вы можете понять причину возникновения этой ошибки.

Из документации Scatter , c является вторым необязательным аргументом, и4-й аргумент всего.Эта ошибка означает, что при распаковке на np.transpose(signal_mfcc) возвращается более 4 предметов.И, как вы определите c позже, он будет определен дважды, и он не сможет выбрать, какой из них правильный.

Пример:

def temp(n, c=0):
    pass
temp(*[1, 2], c=1)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: temp() got multiple values for argument 'c'
...