TypeError: scatter() получил несколько значений для аргумента 'c'

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

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

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

С указанным порогом выходная переменная «кластер» представляет собой последовательность [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'

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

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
0
0
11 041
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из этого ТАК нить вы можете понять, почему у вас возникла эта ошибка.

Из Документация по разбросуc является вторым необязательным аргументом и четвертым общим аргументом. Эта ошибка означает, что ваша распаковка на 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'

Я попытался использовать «plt.scatter(x=np.arrange(198), y = signal_mfcc[:,0], c=clusters)», чтобы попытаться сопоставить кадры «x» с его первым коэффициентом «y» и диаграммой рассеяния. работает! Тем не менее, похоже, что будет много понимания, связанного с кластеризацией, поскольку она не дает мне ожидаемых результатов. Я очень ценю вашу помощь, спасибо.

Seaarmy 26.04.2019 14:01

Другие вопросы по теме