使用numpy方法计算Kernel矩阵时np.vectorize返回结果错误问题
问题原因及解决方案
1. np.vectorize的使用逻辑错误
你设置的签名signature='(n),(n)->()'表示接收两个长度为n的一维数组,输出一个标量。你直接传入形状为(3,3)的data作为两个参数时,函数会默认按行遍历取向量做内积,每行[1,2,3]的内积为1*1 + 2*2 + 3*3 =14,最终输出的三个14就是三行各自的内积结果,和你需要的列两两内积的需求不匹配。
2. 对np.vectorize的功能存在误解
np.vectorize本质只是语法糖,内部实现依旧是Python级别的循环,并不会带来实际的性能提升,用它来优化运行速度的思路本身就是错的。
正确优化方案
你要计算的线性核矩阵本质就是数据矩阵转置和自身的乘积,直接用numpy原生矩阵乘法即可,效率是原生C级别,远高于手写循环:
result = data.T @ data
运行后得到的结果和你双重循环的输出完全一致。
内容的提问来源于stack exchange,提问作者Kenny Smith
相关产品推荐
相关产品推荐

