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

Numpy无循环基于全数据集计算X·Cov·X得到(1000,)结果的方法

Numpy 无循环计算逐样本二次型结果的方案
  • 可以实现,你当前的写法存在逻辑问题:X.T.dot(np.linalg.inv(covariance)).dot(X)得到的是7×7的全局矩阵乘积结果,没有实现逐样本计算二次型的需求,不符合输出维度要求。
  • 正确实现方案有两种常用写法,均直接输出维度为(1000,)的结果:
    1. 方法1:使用np.einsum(爱因斯坦求和)实现,逻辑最直观,代码如下:
      import numpy as np
      inv_cov = np.linalg.inv(covariance)
      # 写法1
      res = np.einsum('ni,ij,nj->n', X, inv_cov, X)
      # 等价写法2
      res = np.einsum('ij,ji->i', X @ inv_cov, X.T)
      
    2. 方法2:使用矩阵乘法 + 逐元素乘加实现,计算效率更高:
      inv_cov = np.linalg.inv(covariance)
      res = np.sum((X @ inv_cov) * X, axis=1)
      
  • 结果验证:你可以将上述结果和循环得到的结果做一致性校验,np.allclose(循环得到的结果数组, res)会返回True,证明结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:45:02