-1

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

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

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

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

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

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

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

谢谢

4

2 回答 2

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 一起出现的次数……

但是我还没有找到任何可以满足您要求的功能,即考虑到距离。所以我认为你必须通过循环来做到这一点。

于 2013-01-17T15:24:29.720 回答
0

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

于 2013-01-17T14:01:35.493 回答