簡體   English   中英

在Matlab中從結構創建變量

[英]creating variables from structures in matlab

我有以下示例表示要解決的問題類型:

clear all
textdata = {'DateTime','St','uSt','Ln','W'};
data = rand(365,4);
Final = struct('data',data,'textdata',{textdata})
clear textdata data

由此,Final.data包含與Final.textdata中的標題相對應的值,但不包括第一個('DateTime'),因此Final.data(:,1)對應於標題'St'...,依此類推。 我想做的是在工作空間中為每個向量創建一個變量。 因此,我將在工作區中使用St,uSt,Ln和W的變量,並在Final.data中給出相應的值。

怎么辦呢?

這可以解決您的問題:

    for ii=2:length( textdata )
      assignin('base',Final.textdata{ii},Final.data(:,ii-1));
    end

讓我知道我是否誤會了。

您問題的直接答案是使用assignin函數,如下所示(編輯:就像10分鍾前建議的macduff一樣):

%Starting with a Final structure containing the data, like this
Final.textdata = {'DateTime','St','uSt','Ln','W'};
Final.data = rand(365,4);

for ix = 1:4
    assignin('base',Final.textdata{ix+1}, Final.data(:,ix));
end

但是,我強烈不鼓勵使用動態變量名稱對這樣的數據進行編碼。 以這種方式開始的代碼通常以充滿長字符串連接和eval語句的意大利面條代碼結尾。 更好的是使用這樣的結構

for ix = 1:4
    dataValues(Final.textdata{ix+1}) = Final.data(:,ix);
end

或者,要在一行中獲得相同的結果:

dataValues = cell2struct(num2cell(Final.data,1), Final.textdata(2:end),2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM