看不懂的python矩阵处理

来源:互联网 发布:友贷资本网络贷款 编辑:程序博客网 时间:2024/05/16 10:30
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]])

0 0
原创粉丝点击