矩阵二范数化的向量化方法

计算矩阵二范数化的向量化方法

设矩阵 X=\left[x_1, x_2, \cdots, x_n \right] \in \mathbb{R}^{m},对其2-范数化,即
\begin{equation} \bar{x}=\left[ \frac{x_1}{\Vert x_1 \Vert_2}, \frac{x_2}{\Vert x_2 \Vert_2}, \cdots, \frac{x_n}{\Vert x_n \Vert_2} \right] \in \mathbb{R}^{m} \\ \Downarrow \\ \bar{x}=\left[ \frac{x_1}{\sqrt{x_1^{T}x_1}}, \frac{x_2}{\sqrt{x_2^{T}x_2}}, \cdots, \frac{x_n}{\sqrt{x_n^{T}x_n}} \right] \\ \Downarrow \\ \bar{x}= \left[ \begin{array}{cccc} \frac{x_{11}}{\sqrt{x_1^{T}x_1}} & \frac{x_{12}}{\sqrt{x_2^{T}x_2}} & \cdots & \frac{x_{1n}}{\sqrt{x_n^{T}x_n}} \\ \frac{x_{21}}{\sqrt{x_1^{T}x_1}} & \frac{x_{22}}{\sqrt{x_2^{T}x_2}} & \cdots & \frac{x_{2n}}{\sqrt{x_n^{T}x_n}} \\ \vdots & \vdots & & \vdots \\ \frac{x_{m1}}{\sqrt{x_1^{T}x_1}} & \frac{x_{m2}}{\sqrt{x_2^{T}x_2}} & \cdots & \frac{x_{mn}}{\sqrt{x_n^{T}x_n}} \end{array} \right]=x\cdot\Sigma \end{equation}
其中
\begin{equation} \Sigma=\left[ \begin{array}{ccc} \frac{1}{\sqrt{x_1^{T}x_1}} & & \\ & \ddots & \\ & & \frac{1}{\sqrt{x_n^{T}x_n}} \end{array} \right] \end{equation}
那么,\Sigma 可以用伪代码 \Sigma=diag(\left[sqrt(diag(x^{T}x))\right]^{-1}) 来实现。

clear
clc

% (1). Loop method
x = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];
[m, n] = size(x);
xBar = zeros(m, n);
for jj = 1 : n
    xBar(:, jj) = x(:, jj) / norm(x(:, jj), 2);
end

% (2). Vectorization method
xBar = 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=\left[x_1, x_2, \cdots, x_n \right] \in \mathbb{R}^{m},计算 d_{ij}=\Vert x_i - x_j \Vert_2, i, j=1, 2, \cdots, n.

直接计算:
\begin{eqnarray} \left \| x_{i} -x_{j} \right \|_{2} =\sqrt{\left ( x_{i} -x_{j} \right ) ^{T} \left ( x_{i} -x_{j} \right )} =\sqrt{x_{i}^Tx_i+x_{j}^Tx_j-2x_{i}^Tx_j} \end{eqnarray}
写成矩阵形式:
[图片上传中...(2021-09-15 15 55 02.png-79ab6b-1631694027609-0)]

如果令:
\begin{eqnarray} dx= \begin{bmatrix} x_{1}^Tx_{1}\\ x_{2}^Tx_{2}\\ \vdots \\ x_{n}^Tx_{n} \end{bmatrix} \cdot \begin{bmatrix} 1 & 1 & \cdots & 1 \end{bmatrix} \end{eqnarray}
则最终结果可表示成:\sqrt{dx+dx^{T}-2x^{T}x}.

Matlab代码实现

clear
clc

% (1). Loop method
x = [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 jj = 1 : nDim
        xj = x(:, jj);
        k(ii, jj) = sqrt((xi - xj).' * (xi-xj));   
    end  % end for
end  % end for

% (2). Vectorization method
x2 = 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

今天的分享就到这里,希望大家喜欢,并且可以从中获得有用的东西。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容