matlab - Matlab中获取度量矩阵的简单方法

标签 matlab matrix vector metric

假设我有一个字符串向量,并且编写了一个函数来查找两个字符串之间的距离。

我想获得由该函数确定的距离矩阵。 我知道用循环来实现这一点的蛮力方法,但是还有其他更简单的路径吗?

例如:

我的功能:

function [value] = func(str1, str2)
    value = abs(str1(1) - str2(1))
end

获取度量矩阵的艰苦方法

v = ['str'; 'rew'; 'ter'];
num = length(v);
metrMat = zeros(num);
for ii = 1:num
    for jj = 1:num
        metrMat(ii,jj) = func(v(ii),v(jj));
    end
end
metrMat

>metrMat =

>     0     1     1
>     1     0     2
>     1     2     0

最佳答案

为什么你这么不愿意使用for循环?他们的速度相当快。

利用度量矩阵的对称性,可以改进 for 循环:

for ii = 1:num
    for jj = 1:ii
        metrMat(ii,jj) = func(v(ii),v(jj));
    end
end

metrMat = metrMat + tril(metrMat)'

如果您有权访问统计工具箱,这可以通过一行实现:

metrMat = squareform(pdist(v(1:num)'));

关于matlab - Matlab中获取度量矩阵的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563536/

相关文章:

Matlab:不同标题的 For 循环

arrays - 如何将一个字符作为 MATLAB 数组重复多次?

matlab - HaarTraining - MATLAB 还是 OpenCV?

c++ - c++测试程序中的非法系统调用(对角矩阵元素求和程序)

perl - 在perl中迭代2个矩阵

c++ - 将 size_t 转换为 vector<unsigned char>

c++ - 排序多维数组 C++ 奇怪的行为

python - Python 中的 Matlab 转换

c++ - 比较 bool 矩阵

javascript - 在由不同颜色的立方体组成的网格中,如何找到匹配的簇?