【问题标题】:Create new list of variable from old list of variables: new names and values (Matlab)从旧的变量列表创建新的变量列表:新名称和值(Matlab)
【发布时间】:2020-08-06 13:37:59
【问题描述】:

对于变量列表中的每个变量,我想编辑变量的名称并更改其值。特别是我必须做的,对于每个变量是:

% old variable
Var = [2 3 4];  

% desired output
Var_new = [var ones(1,3)];

-> Var_new = [2 3 4 1 1 1]

这就是我现在做的方式,但由于我有很多变量,我想循环做,但我不知道怎么做。

编辑:列表中的变量不遵循任何模式。工作区中还有其他变量我不打算包含在此操作中。

【问题讨论】:

  • 您的“旧”变量是如何命名和组织的?他们遵循可重复的模式吗?
  • 不,他们不遵循任何模式。
  • 有问题的变量(您希望修改的变量)是如何创建的?
  • 如提供的示例所示。
  • 所以你不是在加载 .mat 文件之类的吗?听起来您可以进行搜索和替换,重命名这些变量,然后使用我的解决方案。

标签: matlab


【解决方案1】:

有点老套,但假设您的变量遵循固定模式,您可以执行以下操作:

var1 = [2 3 4];
var2 = [4 5 6];
all_vars = whos('var*');

for i = 1:length(all_vars)
    evalin('base',[all_vars(i).name '_new=[evalin(''base'',all_vars(i).name) ones(1,3)]'])
end

var1_new =

     2     3     4     1     1     1


var2_new =

     4     5     6     1     1     1

如果您没有固定的模式,那么您将不得不手动创建一个列表(例如单元格数组):

var1 = [2 3 4];
var2 = [4 5 6];
all_vars = {'var1','var2'};

for i = 1:length(all_vars)
    evalin('base',[all_vars{i} '_new=[evalin(''base'',all_vars{i}) ones(1,3)]'])
end

顺便说一句,我使用名称 var1var2 仅用于演示目的。 This is generally considered bad practice.

【讨论】:

  • 谢谢。但我想知道是否有可能使用不遵循任何模式的变量列表。
  • 是的,我在发布答案后看到了您的评论。假设您的工作区仅包含您希望修改的变量,您可以使用不带通配符的whos。是这样吗?在您希望进行修改时,您的工作空间是什么样的?
  • 很遗憾,我还有很多其他变量不想触及。
  • 在您的问题中分享工作区的外观。
  • 删除你不想碰的变量(你总是可以先把它们保存到一个MAT文件,稍后再重新加载它们),然后用whos得到要处理的变量列表用@ UnbearableLightness 建议的方法。
猜你喜欢
  • 2020-09-29
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 2015-08-11
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多