【问题标题】:TypeError: scatter() got multiple values for argument 'c'TypeError: scatter() 为参数“c”获取了多个值
【发布时间】:2019-09-15 21:00:17
【问题描述】:

我正在尝试对我的 MFCC 数组“signal_mfcc”进行层次聚类,这是一个维度为 (198, 12) 的 ndarray。 198 个音频帧/观察和 12 个系数/维度?

我使用随机阈值“250”和“距离”作为标准,如下所示:

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

在指定的阈值下,输出变量“cluster”是一个长度为 198 或 (198,) 的序列 [1 1 1 ... 1],我假设它会将所有数据指向一个集群。 然后,我使用 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 matplotlib scipy scatter-plot hierarchical-clustering


    【解决方案1】:

    从这个SO Thread,你可以看到为什么会出现这个错误。

    Scatter documentation 中,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'和散点图有效!但是,似乎对聚类会有很多理解,因为它没有给我预期的结果。非常感谢您的帮助,谢谢。
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2022-11-17
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2018-10-18
    • 2018-01-16
    相关资源
    最近更新 更多