2

私は非常に大きなマトリックス (901x1801) を持っています。これは、3 つの同様の配列の値 (反復値を含む) を組み合わせて、数式を使用して一意のコードを生成することによって生成しました。マトリックスはこれらのコードで満たされています。

私の質問は...マトリックス (901x1801) の各値が一意であり、一度も繰り返されていないことを確認するにはどうすればよいですか?

または...生成された各値が一意になるように、同様の要素の3つの配列を組み合わせてマトリックスを生成する方法を教えてください。

早期の返信は非常に重要です。前もって感謝します。

4

2 に答える 2

5

大きな matrixMで、すべての一意の値を取得するには、次を使用します。

uniqueValues = unique(M(:));

次に、繰り返される値があるかどうかを理解するために、次を使用できます。

repeatedValuesFound = numel(uniqueValues) ~= numel(M);

つまり、一意の値の配列に元の配列と同じ数の要素がある場合、元の配列のすべての要素は一意でなければなりません。

于 2013-04-11T17:59:13.750 に答える
3

M で重複の位置を見つけるには、次のコードを使用します。

V = M(:);                           % flatten
[Vs, Vi] = sort(V);                 % sort, Vi are indices into V
delta = Vs(2:end) - Vs(1:end-1);    % delta==0 means duplicate
dup1 = Vi(find(delta == 0));        % dup1 has indices of duplicates in V
dup2 = Vi(find(delta == 0) + 1);    % dup2 has the corresponding other 
                                    % rewrite to [row col]
[dup1(:,1) dup1(:,2)] = ind2sub(size(M), dup1);
[dup2(:,1) dup2(:,2)] = ind2sub(size(M), dup2);

dup1 と dup2 の行には、重複する M 内の位置が含まれています。

于 2013-04-11T18:35:06.640 に答える