Я пытаюсь выполнить кластеризацию иерархии в моем массиве 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'
Диаграмма рассеяния не будет отображаться. Любые подсказки к тому, что может пойти не так? Заранее спасибо!

Из этого ТАК нить вы можете понять, почему у вас возникла эта ошибка.
Из Документация по разбросу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» и диаграммой рассеяния. работает! Тем не менее, похоже, что будет много понимания, связанного с кластеризацией, поскольку она не дает мне ожидаемых результатов. Я очень ценю вашу помощь, спасибо.