看不懂的python矩阵处理

X_vec_squared = np.diag( np.dot(X, X.transpose()) )


    X_train_vec_squared = np.diag( np.dot(self.X_train, self.X_train.transpose()) )


    X_X_train = -2*np.dot(self.X_train, X.transpose())


    dists = np.sqrt( (X_X_train + X_vec_squared).transpose() + X_train_vec_squared )



X is np with(500,1000)      X_train is np with (5000,1000)     对于X中的每一个元素(一行),和X_train中每一个元素,进行norm2运算

最终得到(500,5000)dist矩阵。


eg:

>>> a=np.array([[1,2],[2,3],[3,3]])
>>> b=np.array([[3,2],[1,3],[4,3],[1,1]])
>>> a_vec_squared = np.diag( np.dot(a, a.transpose()) )
>>> a_vec_squared
array([ 5, 13, 18])
>>> b_train_vec_squared = np.diag( np.dot(b, b.transpose()) )
>>> b_train_vec_squared
array([13, 10, 25,  2])

>>> ab_train = -2*np.dot(b, a.transpose())
>>> ab_train
array([[-14, -24, -30],
       [-14, -22, -24],
       [-20, -34, -42],
       [ -6, -10, -12]])
>>> dists = np.sqrt( (ab_train + a_vec_squared).transpose() + b_train_vec_squared )
>>> dists
array([[ 2.        ,  1.        ,  3.16227766,  1.        ],
       [ 1.41421356,  1.        ,  2.        ,  2.23606798],
       [ 1.        ,  2.        ,  1.        ,  2.82842712]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_17136695

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值