0

私は Matlab を初めて使用し、問題が発生しています。

データをインポートして取得した 2 つの行列があります。これらは「ラベル」(テキストのセル行列) と「データ」(倍精度行列?) です。各列に関連する変数を作成して、それらを個別にプロットして計算に使用できるようにする必要があります。これらの変数は、ラベル マトリックスのテキストを使用して自動的に名前が付けられる必要があります。これらのマティックスはソース データによってサイズが異なるため、textread を使用できません

以下は私の問題の例です

データ =

    1  2  3  4

    5  6  7  8

    9 10 11 12

ラベル = ABCD

次のように、Matlab が自動的に変数を作成するようにするには、いくつかのコードが必要です。

A =
1

5

9

B =

2

6

10

「eval」を使用してラベル マトリックスを評価し、次に「=」を使用して列を割り当てようとしましたが、データ マトリックスが「セル」マトリックスではなく「ダブル」マトリックスであるため、エラー メッセージが表示されます。

あなたが提供できる助けをありがとう

4

3 に答える 3

2

動的フィールド名をお勧めします:

Data= [1 2 3 4;
       5 6 7 8; 
       9 10 11 12];
Label={'A','B','C','D'};

for iter=1:length(Label)
    DataStruct.(Label{iter})=Data(:,iter);
                ___________<--- field name created automatically
end

>> DataStruct

DataStruct = 

    A: [3x1 double]
    B: [3x1 double]
    C: [3x1 double]
    D: [3x1 double]

>> DataStruct.A

ans =

     1
     5
     9

このアプローチには、スプレッドシートまたはその他のソースからのすべてのデータを (概念単位で) まとめて保持し、列の名前が変数として既に存在する場合にワークスペース内の変数を誤って上書きしないという利点があります。 (またはさらに悪いことに、潜在的に関数...)

于 2012-07-10T20:44:41.503 に答える
0

トリッキーな作業であることに同意します....ここに解決策があります

    Data=[1 2 3 4; 5 6 7 8; 9 10 11 12]; % A matrix
label=['A', 'B', 'C', 'D']; % its a cell array
for i=1:numel(label)
    v=genvarname(label(i)); %  Generating the variable names
    eval([v ' = Data(i,:)']); % Assinging values into named variables 
end
于 2012-07-12T14:36:51.440 に答える
0

Hasan のコードはうまく機能しますが、「ラベル」はベクトルではなくセル配列でなければならないため、label={'A', 'B', 'C', 'D'} および label{i} と記述する必要があります。4 つの列が必要な場合は、Data(:,i) と記述します。

Data=[1 2 3 4; 5 6 7 8; 9 10 11 12]; % A matrix
label={'A', 'B', 'C', 'D'}; % its a cell array
for i=1:numel(label)
    v=genvarname(label{i}); %  Generating the variable names
    eval([v ' = Data(:,i)']); % Assinging values into named variables 
end
于 2015-03-28T12:01:46.513 に答える