我只是想知道是否有一种干净的方法可以在每次迭代后使用不同的名称存储矩阵?我希望能够根据我在哪个模拟上使用不同的名称存储每个矩阵(uMatrix),例如 Sim1,Sim2,....等。所以 Sim1 = uMatrix 在第一次运行之后,然后 Sim2 = uMatrix第 2 遍。这样每次我都可以为每个不同的模拟存储不同的 uMatrix。
任何帮助将不胜感激,如果这是一个愚蠢的问题,我们深表歉意。此外,关于是否可以清理此代码的任何指示也很好
我在下面使用的代码
d = 2;
kij = [1,1];
uMatrix = [];
RLABEL=[];
SimNum = 2;
for i =1:SimNum
Sim = ['Sim',num2str(i)] %Simulation number
for j=1:d
RLABEL = [RLABEL 'Row','',num2str(j) ' '];
Px = rand;
var = (5/12)*d*sum(kij);
invLam = sqrt(var);
u(j) = ((log(1-Px))*-invLam)+kij(1,j);
uMatrix(j,1) = j;
uMatrix(j,2) = u(j);
uMatrix(j,3) = kij(1,j);
uMatrix(j,4) = Px;
uMatrix(j,5) = invLam;
uMatrix(j,6) = var;
end
printmat(uMatrix,'Results',RLABEL,'SECTION u kij P(Tij<u) 1/Lambda Var')
end
最佳答案
选择实在是太多了。描述将数据放入和获取数据的几种方法:
在变量名中编码
我真的非常不喜欢这种方法,但这似乎是您特别要求的。要将 uMatrix
保存为变量 Sim5
(在第 5 次运行之后),请在循环末尾将以下内容添加到您的代码中:
eval([Sim ' = uMatrix;']); %Where the variable "Sim" contains a string like 'Sim5'
访问数据
listOfStoredDataNames = who('Sim*')
someStoredDataItem = eval(listOfStoredDataNames {1}) %Ugghh
%or of you know the name already
someStoredDataItem = Sim1;
现在,请不要这样做。让我试着说服您有更好的方法。
使用结构
做同样的事情,使用一个名为(例如)simResults
的结构
simResults.(Sim) = uMatrix;
甚至更好
simResults.(genvarname(Sim)) = uMatrix;
访问数据
listOfStoredDataNames = fieldnames(simResults)
someStoredDataItem = simResults.(listOfStoredDataNames{1})
%or of you know the name already
someStoredDataItem = simResults.Sim1
这避免了总是有问题的 eval
语句,更重要的是使额外的代码更容易编写。例如,您可以轻松地将所有 simResults
传递到函数中以进行进一步处理。
使用 map
要用map做同样的存储,首先要初始化map
simResults = containers.Map('keyType','char','valueType','any');
然后在每次迭代时将值添加到 map
simResults(Sim) = uMatrix;
访问数据
listOfStoredDataNames = simResults.keys
someStoredDataItem = simResults(listOfStoredDataNames{1})
%or of you know the name already
someStoredDataItem = simResults('Sim1')
map 在可用于名称的字符串中更灵活一些,如果您愿意的话,这可能是更好的解决方案。
使用元胞数组
为了简单,没有废话的结果存储
simResults{i} = uMatrix;
访问数据
listOfStoredDataNames = {}; %Names are Not available using this method
someStoredDataItem = simResults{1}
或者,使用轻微程度的废话
simResults{i,1} = Sim; %Store the name in column 1
simResults{i,2} = uMatrix; %Store the result in column 2
访问数据
listOfStoredDataNames = simResults(:,1)
someStoredDataItem = simResults{1,2}
关于MATLAB 每次迭代更改矩阵的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15438464/