You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中创建不同组件数的PCA对象数组触发TypeError报错

报错根因

你提前创建的pca_comp是数值类型的NumPy数组,这类数组和C语言里声明固定元素类型的数组逻辑类似,只允许存储数值类(int、float等)数据,当你尝试把PCA类的实例对象存入数组时,NumPy会默认尝试把对象转成float类型,自然触发float() argument must be a string or a number, not 'PCA'的类型错误。
类比C语言的场景就很好理解:相当于你提前声明了float pca_comp[5]的浮点型数组,却往数组元素位置塞自定义结构体类型的变量,类型不匹配直接报错。
另外你代码里samples = np.shape(pca_sizes)这行定义后没有被使用,属于冗余代码,可以直接删除。

可行解决方法

你可以二选一实现存储不同参数PCA对象的需求:

  • 方案1:直接用Python原生列表存储(最简便,推荐)
    Python原生列表不限制元素类型,可以存储任意类型的对象,不需要提前指定元素类型,直接追加元素即可:
    import numpy as np
    from sklearn.decomposition import PCA
    
    pca_sizes = np.array([10, 50, 100, 250, 500])
    pca_comp = []
    for n in pca_sizes:
        pca_comp.append(PCA(n_components=n))
    
    # 后续批量处理数据直接遍历列表即可
    # for pca in pca_comp:
    #     transformed_data = pca.fit_transform(your_data)
    
  • 方案2:指定NumPy数组的存储类型为object
    如果你确实需要用NumPy数组存储,初始化数组时显式指定dtype=object,告诉NumPy该数组用于存储任意Python对象,不要做数值类型强制转换:
    import numpy as np
    from sklearn.decomposition import PCA
    
    pca_sizes = np.array([10, 50, 100, 250, 500])
    pca_comp = np.empty(len(pca_sizes), dtype=object)
    for i in range(len(pca_sizes)):
        pca_comp[i] = PCA(n_components=pca_sizes[i])
    

内容的提问来源于stack exchange,提问作者William Wades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:36:18