matlab中的2d矩阵直方图,将每列解释为单独的元素

时间:2012-06-20 20:36:05

标签: matlab histogram

我在matlab中有一个128 x 100矩阵,其中每列应被视为一个单独的元素。让我们称之为矩阵M.

我有另一个128 x 2000矩阵(称为V),由矩阵M的列组成。

如何制作直方图来映射第二个矩阵中使用的每列的频率?

hist(double(V),double(M)) gives the error:

 Error using histc
Edge vector must be monotonically
non-decreasing.

我该怎么办?

2 个答案:

答案 0 :(得分:0)

  

[Lia,Locb] = ismember(A,B,'rows')也会返回一个向量,Locb,   包含A中每行的最高索引,也是一行   在B.输出向量Locb,在A不是一行的任何地方都包含0   乙

带有ismember参数的

rows可以识别另一个矩阵的行来自一个矩阵的哪一行。由于它适用于行,而您正在查找列,因此只需转置两个矩阵。

[~,Locb]=ismember(V',M');
histc(Locb)

答案 1 :(得分:0)

这是一个例子。我们从类似于您所描述的数据开始

%# a matrix of 100 columns
M = rand(128,100);
sz = size(M);

%# a matrix composed of randomly selected columns of M (with replacement)
V = M(:,randi([1 sz(2)],[1 2000]));

然后:

%# map the columns to indices starting at 1
[~,~,idx] = unique([M,V]', 'rows', 'stable');
idx = idx(sz(2)+1:end);

%# count how many times each column occurs
count = histc(idx, 1:sz(2));

%# plot histogram
bar(1:sz(2), count, 'histc')
xlabel('column index'), ylabel('frequency')
set(gca, 'XLim',[1 sz(2)])

enter image description here