【问题标题】:save columns of matrix in vector variables in Matlab在 Matlab 中将矩阵列保存在向量变量中
【发布时间】:2022-10-14 03:09:43
【问题描述】:

在 Matlab (R2021b) 中,我使用了一些给定的函数,它读取几个变量的时间相关值并将它们与时间向量一起返回到组合矩阵中。在数据矩阵中,每一列代表一个变量的时间相关值的一个向量。

[data,time] = function_reading_data_of_several_values('filename');

为了进一步处理变量的以下代码的可读性,我想将这些列存储在单独的向量变量中。我正在这样做:

MomentX = data(1,:);
MomentY = data(2,:);
MomentZ = data(3,:);
ForceX  = data(4,:);
ForceY  = data(5,:);
ForceZ  = data(6,:);

那是有效的。但是是否有一些更简单(或更短)的方法可以将矩阵的列分配给各个向量?我问是因为在实际程序中我有超过示例中的 6 列。代码变得很长。我在想类似于下面一行的东西,但这不起作用:

[MomentX,MomentY,MomentZ,ForceX,ForceY,ForceZ] = data; %does not work

你有什么主意吗?感谢帮助!

更新:


感谢小组中使用表格的提示,解决方案可能是这样的:

...
[data,time] = function_reading_data_of_several_values('filename'); 
% data in matrix. Each column representing a stime dependent variable

varNames = {'MomentX', 'MomentX',...}; % Names of columns 
T=array2table(data','VariableNames',varNames); % Transform to Table 
Stress = T.MomentX/W + T.ForceY/A   %accesing table columns
...

这对我来说似乎工作正常且可读。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    解决方案 1:在像 dSpace 这样的工业解决方案中,在结构数组中这样做很常见:

    mydata.X(1).time = [0.01 0.02 0.03 0.04];
    mydata.Y(1).name = 'MomentX';
    mydata.Y(1).data = [1 2 3 4];
    mydata.Y(2).name = 'MomentY';
    mydata.Y(2).data = [2 3 4 5];
    

    方案二:建表也很常见 见:https://de.mathworks.com/help/matlab/ref/table.html

    【讨论】:

    • 嗨,谢谢你的提示。关于解决方案 1:是的,类似结构的格式会很好。但由于我使用的是现有工具链的功能,因此我必须按原样使用返回值格式。
    • 关于解决方案 2:这可能有助于使用表。我可以将矩阵转移到一个表中并像这样使用它: varNames = {'MomentX', 'MomentX',...}; T=array2table(data','VariableNames',varNames);应力 = T.MomentX/W + T.ForceY/A %后续计算
    【解决方案2】:

    正如已经评论的那样,使用表格而不是单独的变量可能更好,这可能不是一个好主意。但是,如果您愿意,可以这样做:

    A = magic(6) % example
    A_cell = num2cell(A, 1); % separate columns in cells
    [MomentX, MomentY, MomentZ, ForceX, ForceY, ForceZ] = A_cell{:};
    

    这和你的几乎一样

    [MomentX,MomentY,MomentZ,ForceX,ForceY,ForceZ] = data; %does not work

    除了右侧需要是comma-separated list,在这种情况下,它是从cell array 获得的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2017-08-27
      • 2015-07-15
      相关资源
      最近更新 更多