Python3.x调用np.maximum.outer处理pandas Series报NotImplementedError求助
问题原因
适配Python3的新版pandas框架未实现numpy通用函数的outer方法对Series类型的支持,你调用RCA.sum()得到的是pandas Series对象,直接传入np.maximum.outer就会触发你遇到的NotImplementedError报错。
可行解决方案
最简单的绕过方式是将Series转换为numpy数组后再执行outer计算,数值计算逻辑和你原来Python2环境下的运行结果完全一致,可直接复用后续计算逻辑。
最简实现代码
import numpy as np import pandas as pd # 原有RCA矩阵定义保持不变 RCA = pd.DataFrame( data=[ (1,0,0,0), (1,1,1,0), (0,0,1,0), (0,1,0,1), (1,0,1,0)], columns=['ct1','ct2','ct3','ct4'], index=['ind_1','ind_2','ind_3','ind_4','ind_5']) norms = RCA.sum() # 仅需修改这一行,将Series转为numpy数组后调用outer norm = np.maximum.outer(norms.to_numpy(), norms.to_numpy()) proximity = RCA.T.dot(RCA).div(norm)
可选:生成带索引的norm DataFrame
如果你需要norm变量保留行列标签和DataFrame结构方便后续校验,可补充一步转换:
norms = RCA.sum() norm_arr = np.maximum.outer(norms.to_numpy(), norms.to_numpy()) # 给生成的矩阵加上和列名对应的行列索引 norm = pd.DataFrame(norm_arr, index=norms.index, columns=norms.index) proximity = RCA.T.dot(RCA).div(norm)
内容的提问来源于stack exchange,提问作者PAstudilloE
相关产品推荐
相关产品推荐

