0

我在 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.

我该怎么办?

4

2 回答 2

0

[Lia,Locb] = ismember(A,B,'rows')还返回一个向量 Locb,其中包含 A 中的每一行(也是 B 中的一行)在 B 中的最高索引。输出向量 Locb 包含 0只要 A 不是 B 的行。

ismember使用rows参数可以识别另一个矩阵的行来自一个矩阵的哪一行。由于它适用于行,并且您正在寻找列,因此只需转置两个矩阵。

[~,Locb]=ismember(V',M');
histc(Locb)
于 2012-06-20T20:52:06.800 回答
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)])

在此处输入图像描述

于 2012-06-21T06:20:51.807 回答