2

ここに私のMATLABコードがあります:

[numeric, pics] = xlsread('matrix.xls');
[r,c] = size(pics);
done = r*c;

randvecall = randsample(done, done, true);
randvec = randvecall([1,diff(randvecall)]~=0);
currk = randvec(k);

基本的にこれが行うことは、Microsoft Excel スプレッドシートから値の配列を構築することです。配列に重複を入れたいが、連続した重複はしたくないので、それらを削除するコード行を追加しました。randvecall に手動で値を入力して上記のコードを実行すると、完全に機能します。ただし、上記のコードを実行すると、次のエラーが発生します。

??? Error using ==> horzcat
CAT arguments dimensions are not consistent.

Error in ==> testAS_randsample at 76
randvec = randvecall([1,diff(randvecall)]~=0);

なぜこうなった?たとえば、これは機能します:

randvecall=[1 2 3 4 5 5 5 5 8 7 8 8];
randvec = randvecall([1,diff(randvecall)]~=0);
disp(randvec)

randvec = [1 2 3 4 5 8 7 8]

それがまさに私のコードでやりたいことです。しかし、実際のコードで horzcat エラー メッセージが表示されるのはなぜですか? 誰でもこれで私を助けることができますか? randsample が randvecall 配列を構築する方法と関係があるに違いありませんが、なぜこのエラー メッセージが表示されるのかわかりません。

4

1 に答える 1

3

これは、動作の問題のようです。ベクトルが必要なのに、ベクトルがrandsample(n,k,true)返されます。転置でうまくいくはずです。1xkkx1randvecall

編集:

一般的な読者のために、コードで言い換えます。

randvec = randvecall([1,diff(randvecall')]~=0);
于 2012-06-12T13:44:07.853 に答える