【发布时间】:2015-06-14 11:28:10
【问题描述】:
在 Matlab 中,假设我有以下矩阵,它代表 10 个人的群体:
pop = [0 0 0 0 0; 1 1 1 0 0; 1 1 1 1 1; 1 1 1 0 0; 0 0 0 0 0; 0 0 0 0 0; 1 0 0 0 0; 1 1 1 1 1; 0 0 0 0 0; 0 0 0 0 0];
ones 和 zeros 的行定义了 6 种不同的个人“类型”。
a = [0 0 0 0 0];
b = [1 0 0 0 0];
c = [1 1 0 0 0];
d = [1 1 1 0 0];
e = [1 1 1 1 0];
f = [1 1 1 1 1];
我想在pop 中定义a、b、c、d、e 和f 的比例/频率。
我想最终得到以下列表:
a = 0.5;
b = 0.1;
c = 0;
d = 0.2;
e = 0;
f = 0.2;
我能想到的一种方法是对行求和,然后计算每行出现的次数,然后排序和索引
sum_pop = sum(pop')';
x = unique(sum_pop);
N = numel(x);
count = zeros(N,1);
for l = 1:N
count(l) = sum(sum_pop==x(l));
end
pop_frequency = [x(:) count/10];
但这并不能完全得到我想要的(即当频率 = 0 时),而且似乎必须有更快的方法?
【问题讨论】: