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
相关产品推荐
相关产品推荐

