0

各列を個別の要素として扱う必要がある matlab に 128 x 100 の行列があります。この行列を M としましょう。

マトリックス M の列で構成される別の 128 x 2000 マトリックス (V と呼ばれる) があります。

2 番目のマトリックスで使用されている各列の頻度をマップするヒストグラムを作成するにはどうすればよいですか?

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')は、B の行でもある A の各行の B の最大インデックスを含むベクトル Locb も返します。出力ベクトル Locb には 0 が含まれます。 A が B の行でない場合。

ismemberrows引数を使用すると、別の行列の行が 1 つの行列のどの行から来ているかを識別できます。行で機能し、列を探しているので、両方の行列を転置するだけです。

[~,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 に答える