1

私はマトリックスを持っています

 DataSet(1000,400)

最初に次のように宣言された最終行列に各行をコピーしたい

FinalDataSet=[]

私がコピーのために従ったルールは次のとおりです。これはユーザー入力に基づいています

 For any row i in "DataSet"
      if user enters a character X
          Add to FinalDataSet the vector (X,All Elements of DataSet(i))
      else do nothing

上記に対して次のコードを実装しました

n=size(DataSet,1);
for i=1:n
     element=inputdlg('Enter Character');
     if(~isempty(element))
          FinalDataSet=[FinalDataSet;[element DataSet(i,:)]];
     end
 end

[](入力ダイアログは、キャンセルが押されると戻ります)

ただし、上記のコードを実行すると FinalDataSet、次の形式になります

 'H'    [1x400 double]
 'g'    [1x400 double]
 'i'    [1x400 double]

ここで何が問題なのですか?2 つの異なるタイプのベクトルを結合しようとしているからでしょうか? (1000,2) 行列ではなく、(1000,401) 次元行列を取得するにはどうすればよいですか?

私が感じているのは、文字に対応する ASCII 値を保存するか、ユーザーの選択のために別のベクトルを完全に管理する必要があるということです。しかし、上記の2つの方法がなくても可能ですか?? 助けてください!!

4

2 に答える 2

1

問題が何であるかを理解するのに時間がかかりました。実際、文字を含む行列を取得することはできません。

本当にこれが必要な場合は、次のようにすべてを 1000x401 セル配列に格納するだけで解決できます。

c =  ['H' num2cell(1:10)]

ただし、そうすると、マトリックス処理によって得られる利便性/効率性のかなりの部分を放棄することになります。

したがって、私はこの代替案を提案します:

文字を数値として保存することに満足している場合は、次のことができます。

element = {'H'} % inputdlg returns a 1x1 cell
i=1;
DataSet = rand(1000,400);

v = [element{1}+0 DataSet(i,:)]

次に、それがどの文字であるかを確認するには、次を使用できますchar

char(v(1))
于 2013-11-14T16:26:39.570 に答える