【发布时间】: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
我有一个像这样的数组中的点列表
points = [[1,2];[2,5];[7,1]...[x,y]]
x 介于 0 和 1020 之间,y 介于 0 和 1920 之间。
如何在 Matlab 中计算点数组的熵?
非常感谢!
【问题讨论】:
标签: arrays matlab statistics data-analysis entropy
我假设您想将每个 [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')
A 的'rows' - 不管它们有多长。