【问题标题】:Calculate the entropy of a list of 2D points in Matlab在 Matlab 中计算二维点列表的熵
【发布时间】:2020-02-05 22:41:15
【问题描述】:

我有一个像这样的数组中的点列表

points = [[1,2];[2,5];[7,1]...[x,y]]

x 介于 0 和 1020 之间,y 介于 0 和 1920 之间。

如何在 Matlab 中计算点数组的熵?

非常感谢!

【问题讨论】:

    标签: arrays matlab statistics data-analysis entropy


    【解决方案1】:

    我假设您想将每个 [x,y] 点视为一个数据点。让我们定义一些示例性数据:

    A = [[1,2];[2,5];[7,1];[1,2]];
    

    首先我们给相等的点相等的标识符,我们可以这样做

    [~,~,ic] = unique(A, 'rows');
    

    然后我们计算频率和每个标识符的概率:

    [frequency, ~] = histcounts(ic,max(ic));
    probability = frequency/sum(frequency);
    

    这样我们可以立即计算熵:

    entropy = -sum(probability .* log(probability))
    

    (确保使用正确的对数,不同的字段通常使用不同的底数。)

    【讨论】:

    • 非常感谢。
    • histcounts 使用第二个标量输入非常有用。我没有意识到这一点。比看起来丑陋的histcounts(ic, [1:max(ic) inf]) 整洁得多。也可以直接使用probability = histcounts(ic, max(ic), 'Normalization', 'probability')
    • 哦,这很整洁 - 但你必须承认它不那么高尔夫球!
    • 请问如何更新具有 x、y 和 z 的 3D 点数组?非常感谢!
    • @Mohammad 代码应该适用于任意维数的点,我们只是比较矩阵A'rows' - 不管它们有多长。
    猜你喜欢
    • 2016-12-07
    • 2014-03-10
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多