0

これはそれほど難しい質問ではありませんが、私はまだ MATLAB を学んでいるので、少し苦労していることに感心しなければなりません。では、2 つのデータセットがあるとします。

Input1 = [
Date;X1;X2;X3
2007-06-19;2;1;3
2007-06-22;1;2;3
2007-06-01;1;2;3
2007-06-18;1;2;3
2007-06-19;1;2;3
2007-06-20;1;2;3
2007-06-25;1;2;3
]

Input2 = [
Date;X1;X2;X3
2007-06-22;1;2;3
2007-06-19;1;2;3
2007-06-25;2;1;3
2007-06-01;1;2;3
2007-06-15;1;2;3
2007-06-18;1;2;3
2007-06-21;1;2;3
2007-06-25;1;2;3
]

Output1 = [
]

Output2 = [
]

私がやりたいことは次のとおりです。-最初の列に基づいてそれぞれを個別に並べ替えます(最も古い日付が最初に配置されます)。- 最初の列に基づいて、各ファイルの重複を個別に削除します。- キーが両方のデータセットに存在する場合にのみ、2 行 (データセットごとに 1 行) を保持します。- 両方のリストの日付要素が 1 つずつ同じであることを確認する最終チェックを行います。

ユーリン。

4

3 に答える 3

3

開始するには、Matlabのパワーを実際に発揮する前に、入力データを少しクリーンアップする必要があります。

まず、「列ヘッダー」、つまり行を失いますDate;X1;X2;X3。Matlab配列は数値であり、Matlab文字配列でさえ実際には数値です。

次に、各行の最後にのみセミコロンを配置します。Matlab配列に関する限り、セミコロンは行の終わりであるため、テーブルは列ベクトルになる恐れがあります。現在セミコロンがある場合はスペースまたはコンマを使用し、各行の最後にセミコロンを配置します。

第三に、Matlab配列は数値であり、2007-06-22のようなものは数値ではありません。あなたが書いたように、それはMatlabが文字列として認識するものでもありません。そして、それが文字列として認識された場合、それはすべて数値ではないため、入力をバーフします。

セル配列または構造体を操作することもできますが、入力配列を数値に変換する方がおそらく簡単です。たとえば、次の式を評価します。

Input1 = [
datenum(datevec('2007-06-19')),2,1,3;
datenum(datevec('2007-06-22')),1,2,3;
datenum(datevec('2007-06-01')),1,2,3;
datenum(datevec('2007-06-18')),1,2,3;
datenum(datevec('2007-06-19')),1,2,3;
datenum(datevec('2007-06-20')),1,2,3;
datenum(datevec('2007-06-25')),1,2,3;
]

ダンがすでに提案しているように、作業に適した数値配列が得られます。 datenumおよびdatevecはMatlabに組み込まれている関数です。

于 2012-06-18T14:50:00.107 に答える
2

開始するには、重複のない並べ替えられたリストで、それぞれに対して次のことを行います。

% find the unique values for the first column
[~, I] = unique(Input1(:,1));
% extract the records for each unique value in the first column (sorted)
SortedAndUnique = Input1(I,:);

私はあなたが残りを解決すると確信しています

于 2012-06-18T14:30:53.710 に答える
1

いくつかのヒント:

  • datenum('2007-06-22','yyyy-mm-dd')日付を数値として表現するために使用できます
  • unique()ダンの答えで言及されているように
  • intersect()Input1 と Input2 の両方にあるキーを見つける
于 2012-06-18T14:54:15.040 に答える