在Matlab中获取度量矩阵的简便方法

时间:2015-04-10 14:05:09

标签: 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

2 个答案:

答案 0 :(得分:3)

为什么你不愿意使用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)'));

答案 1 :(得分:2)

这将是一个vectorized approach bsxfun -

metrMat = abs(bsxfun(@minus,v(:,1),v(:,1).'))

示例运行 -

>> v
v =
str
rew
ter
>> metrMat = abs(bsxfun(@minus,v(:,1),v(:,1).'))
metrMat =
     0     1     1
     1     0     2
     1     2     0