2017-05-05 5 views
0

私は、それぞれの場合にN1とN2の2つの異なる特性を持つ 'M'ユーザを持っています。 IE:Aは、各ユーザーの性別{'F'、 'M'}(N1 = 2)を明示するMx1ベクトルであり、Bは、ユーザーが住んでいる大陸を特定するMx1ベクトルです{'ASIA'、 'AFRICA' 、 'AMERICA'など}}(N2 = 6)。 forループを使用せずに、セックスと大陸の各組み合わせのユーザー数を示すN1xN2(2 * 6)行列を作成します。 私はこのコードを試してみた:Matlabの2次元論理行列

bsxfun(@eq,A,unique(A)')'*bsxfun(@eq,B,unique(B)')

をしかし、それは私が必要とするものではありません。

ありがとうございます。

PS:値のデカルト積は必要ありません。各組み合わせの要素を数える行列が必要です。

+0

私はそれが重複しないと思います。 Eric、あなたは以下のことをすることができます。〜、〜、ia] =ユニーク(A); [〜、〜、ib] =ユニーク(B); M = accumarray([ia、ib]);試してみませんでしたが、動作する必要があります –

+0

'M = accumarray([ia、ib])'は、エラーを受けて次のようにスローします: "accumarrayを使用しているときにエラーが発生しました。 'M = accumarray(ia、ib)'に変更しましたが、1つの特性だけのカウントを持つベクトルを返します。 – Eric

+0

申し訳ありませんが、snd引数はオプションです。 'accumarray([ia、ib]、1)'を試してください –

答えて

0

あなたはここにaccumarrayが必要になります:

[~,~,ia] = unique(A); 
[~,~,ib] = unique(B); 
M = accumarray([ia, ib], 1); 
+0

まさに私が必要なもの!どうもありがとうございました – Eric