在Matlab中保存向量变量中的矩阵列



在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
...

这似乎工作得很好,对我来说可读。

解决方案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];

解决方案2:创建表也是非常常见的请参阅:https://de.mathworks.com/help/matlab/ref/table.html

如前所述,使用表而不是单独的变量可能不是一个好主意。但如果你想,可以这样做:

A = magic(6): % example 6-column matrix
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

除了右侧需要是一个逗号分隔的列表,在本例中,该列表是从单元格数组中获得的。

最新更新