我在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.
我该怎么办?
答案 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)])