在数字向量中找到相关性

时间:2013-01-17 12:21:22

标签: arrays matlab

我的输入是一种简单的矢量:

vector=[1 2 3 2 3 4 1 1 2]; 

(仅1-4的数字),我想创建一个矩阵,其行是所有可能的两个数字组合(在这种情况下为16行,例如:第1行为11,第2行为12等) ,并且具有与向量的长度减去一(8)相同的列数。

矩阵中的每个单元格保持在向量中找到特定组合的次数,其具有特定的相对距离 - 即列的数量。 例如:

矩阵(1,1)= 1(在1到1的相对距离内找到1次1) 矩阵(1,6)= 1(在6到另一个1的相对距离内找到1次) 矩阵(2,1)= 2(在1到另一个2的相对距离内找到1次)

有人知道matlab是否具有这样做的功能? (或接近那?) (不是通过循环,使用'strfind'等,我知道那些)。

如果有人知道我可以使用的具体功能,请告诉我!

谢谢

2 个答案:

答案 0 :(得分:2)

如果你只对同时出现的次数感兴趣,这就是两个数字一起出现的次数,你可以使用Matlab函数'graycomatrix',它给出灰度级共生矩阵。

由于它旨在与矩阵一起使用,您应该将矢量转换为矩阵,例如用零填充:

vector=zeros(9);
vector(1,:)=[1 2 3 2 3 4 1 1 2];
[glcm] = graycomatrix(vector,'NumLevels',5,'G',[])

您将获得以下结果:

glcm =

    64     0     0     0     0
     0     1     2     0     0
     0     0     0     2     0
     0     0     1     0     1
     0     1     0     0     0

您可以忽略第一行和第一行,因为它们对应于值0:

glcm(:,1)=[];
glcm(1,:)=[];
glcm


glcm =

     1     2     0     0
     0     0     2     0
     0     1     0     1
     1     0     0     0

现在您有每个组合的共同发生次数。例如,glcm(1,1)给出了两个1一起出现的次数,glcm(1,2),1和2一起出现的次数......

但我没有发现任何可以做你要求的功能,这是考虑到距离。所以我认为你必须通过循环来完成它。

答案 1 :(得分:0)

Matlab没有这样做的功能。循环当然似乎是完成任务的最直接方式。