Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab N维直方图计数_Matlab - Fatal编程技术网

Matlab N维直方图计数

Matlab N维直方图计数,matlab,Matlab,我目前正试图编写一个函数,使用直方图计数为向量集合分配概率。这基本上是一个计数练习,但需要一些技巧才能有效地实现。我会举例说明: 假设我有一个矩阵X=[x1,x2…xM],有N行和M列。这里,X表示M,N维向量的集合。换句话说,X的每一列都是N维向量 例如,我们可以使用以下方法为M=10000向量和N=5维度生成这样的X: X = randint(5,10000) 这将生成一个由0和1组成的5 x 10000矩阵,其中每列表示一个由1和0组成的5维向量 我想通过一个基本的直方图计数为每个向量分

我目前正试图编写一个函数,使用直方图计数为向量集合分配概率。这基本上是一个计数练习,但需要一些技巧才能有效地实现。我会举例说明:

假设我有一个矩阵
X=[x1,x2…xM]
,有
N
行和
M
列。这里,
X
表示
M
N
维向量的集合。换句话说,
X
的每一列都是
N
维向量

例如,我们可以使用以下方法为
M=10000
向量和
N=5
维度生成这样的
X

X = randint(5,10000)
这将生成一个由0和1组成的5 x 10000矩阵,其中每列表示一个由1和0组成的5维向量

我想通过一个基本的直方图计数为每个向量分配一个概率。步骤很简单:首先找到
X
的唯一列;其次,计算每个唯一列出现的次数。特定事件发生的概率是该列在X中的#次/在
X
中的总列数

回到上面的例子,我可以使用MATLAB中的
unique
函数执行第一步,如下所示:

UniqueXs = unique(X','rows')' 
上面的代码将返回
UniqueXs
,这是一个包含
N
行的矩阵,其中只包含唯一的X列。请注意,转置是由于奇怪的MATLAB输入要求造成的

然而,我无法找到一个好方法来计算UniqueX中每个列在X中的次数。所以我想知道是否有人有任何建议

概括地说,我可以想出两种实现计数步骤的方法。第一种方法是使用
find
功能,尽管我认为这可能会很慢,因为
find
是一种元素操作。第二种方法是递归调用
unique
,因为它还可以提供
X
中唯一列的one索引。这将允许我们从
X
中删除该列,并在结果
X
上重新执行
unique
,并继续计数


理想情况下,我认为
unique
可能已经在进行一些计数,因此最有效的方法可能是在没有内置函数的情况下工作。

这里有两个解决方案,一个假设所有值都是0或1(就像您描述中的示例),另一个则不是。即使是在大数据上,这两种代码都应该非常快(二进制值的代码更是如此)

1) 只有零和一 2) 任意正整数 现在我们可以看到,例如,每个“唯一向量”发生了多少次:

>> table = sortrows([GN num2cell(count)])
table = 
    '000064850843749'    [1]       # original vector is: [0 64 850 843 749]
    '000130170550598'    [1]       # and so on..
    '000181606710020'    [1]
    '000220492735249'    [1]
    '000275871573376'    [1]
    '000525617682120'    [1]
    '000572482660558'    [1]
    '000601910301952'    [1]
    ...

请注意,在我的随机数据示例中,向量空间变得非常稀疏(随着最大可能值的增加),因此,如果所有计数都等于1,我不会感到惊讶…

这里有两个解决方案,一个假设所有值都是0或1(就像您描述中的示例),另一个则不是。即使是在大数据上,这两种代码都应该非常快(二进制值的代码更是如此)

1) 只有零和一 2) 任意正整数 现在我们可以看到,例如,每个“唯一向量”发生了多少次:

>> table = sortrows([GN num2cell(count)])
table = 
    '000064850843749'    [1]       # original vector is: [0 64 850 843 749]
    '000130170550598'    [1]       # and so on..
    '000181606710020'    [1]
    '000220492735249'    [1]
    '000275871573376'    [1]
    '000525617682120'    [1]
    '000572482660558'    [1]
    '000601910301952'    [1]
    ...

请注意,在我的随机数据示例中,向量空间变得非常稀疏(随着最大可能值的增加),因此,如果所有计数都等于1,我不会感到惊讶…

N会有多大?如果很小,您可能希望将列向量视为二进制字符串。因此,它们可以用整数表示。Thanks@BerkU.:我想到了一个有效的解决方案(通过将列转换为字符串),但只有当值都是0和1时,它才会起作用。总是这样吗?@eat:不知怎的,我没看到你的评论!看起来你已经提出了我的想法…@Amro:是的,但是让我们等一下OP能对这个案子有什么更多的评论。Thanks@Amro不幸的是,情况并非总是如此。在更一般的设置中,每行中的条目可以具有有限的值集(即,第一行中的条目可以是{1,2,3},第二行中的条目可以是{4,5,6})。这有帮助吗?有多大?如果很小,您可能希望将列向量视为二进制字符串。因此,它们可以用整数表示。Thanks@BerkU.:我想到了一个有效的解决方案(通过将列转换为字符串),但只有当值都是0和1时,它才会起作用。总是这样吗?@eat:不知怎的,我没看到你的评论!看起来你已经提出了我的想法…@Amro:是的,但是让我们等一下OP能对这个案子有什么更多的评论。Thanks@Amro不幸的是,情况并非总是如此。在更一般的设置中,每行中的条目可以具有有限的值集(即,第一行中的条目可以是{1,2,3},第二行中的条目可以是{4,5,6})。这有用吗?
>> table = sortrows([GN num2cell(count)])
table = 
    '000064850843749'    [1]       # original vector is: [0 64 850 843 749]
    '000130170550598'    [1]       # and so on..
    '000181606710020'    [1]
    '000220492735249'    [1]
    '000275871573376'    [1]
    '000525617682120'    [1]
    '000572482660558'    [1]
    '000601910301952'    [1]
    ...