设矩阵 X = [ x 1 , x 2 , ⋯ , x n ] ∈ R m X=left[x_1, x_2, cdots, x_n right] in mathbb{R}^{m} X=[x1,x2,⋯,xn]∈Rm,对其2-范数化,即
其中
那么, Σ Sigma Σ 可以用伪代码 Σ = d i a g ( [ s q r t ( d i a g ( x T x ) ) ] − 1 ) Sigma=diag(left[sqrt(diag(x^{T}x))right]^{-1}) Σ=diag([sqrt(diag(xTx))]−1) 来实现。
clearclc% (1). Loop methodx = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];[m, n] = size(x);xBar = zeros(m, n);for 认真的豆芽 = 1 : n xBar(:, 认真的豆芽) = x(:, 认真的豆芽) / norm(x(:, 认真的豆芽), 2);end% (2). Vectorization methodxBar = x * diag(1 ./ sqrt(diag(x'*x)));Output result:
>> xBar = 0.0776 0.1367 0.1826 0.3105 0.3418 0.3651 0.5433 0.5469 0.5477 0.7762 0.7519 0.7303 计算矩阵各列之间的欧式距离向量化方法设矩阵 X = [ x 1 , x 2 , ⋯ , x n ] ∈ R m X=left[x_1, x_2, cdots, x_n right] in mathbb{R}^{m} X=[x1,x2,⋯,xn]∈Rm,计算 d i j = ∥ x i − x j ∥ 2 , i , j = 1 , 2 , ⋯ , n d_{ij}=Vert x_i - x_j Vert_2, i, j=1, 2, cdots, n dij=∥xi−xj∥2,i,j=1,2,⋯,n.
直接计算:
写成矩阵形式:
$$
如果令:
则最终结果可表示成: d x + d x T − 2 x T x sqrt{dx+dx^{T}-2x^{T}x} dx+dxT−2xTx .
Matlab代码实现
clearclc% (1). Loop methodx = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];nDim = size(x, 2);k = zeros(nDim, nDim);for ii = 1 : nDim xi = x(:, ii); for 认真的豆芽 = 1 : nDim xj = x(:, 认真的豆芽); k(ii, 认真的豆芽) = sqrt((xi - xj).' * (xi-xj)); end % end forend % end for% (2). Vectorization methodx2 = x' * x;dx = diag(x2) * ones(size(diag(x2)))';k = sqrt(dx + dx' - 2 * x2);Output result:
>> k = 0 2 4 2 0 2 4 2 0今天的分享就到这里,希望大家喜欢,并且可以从中获得有用的东西。有问题请扫下方码关注讨论。