【问题标题】:A way to dynamically create variables in Matlab?一种在 Matlab 中动态创建变量的方法?
【发布时间】:2014-07-15 13:45:10
【问题描述】:

我正在处理的案例是划分我使用良好编码实践(等...)收集的大型 3 维数据数组,现在我需要将此数组的层分割成单独的变量以进行单独处理在其他地方,我不能这样称呼我的数据BigData(:,:,n)。

所以我想创建一个循环,像这样创建新变量

for i=1:n

createVariable('user_' i) = BigData(:,:,i);

end

如何在不每次都手动编写 n 个新变量的情况下做到这一点?

user_1 = BigData(:,:,1);
user_2 = BigData(:,:,2);
user_3 = BigData(:,:,3);
.
.
.

【问题讨论】:

  • 我强烈反对这种方法。不过,in the mathworks forum 您可能会找到您要找的东西。
  • 拒绝投票不会改变神经网络工具箱只接受二维数组的情况。
  • 虽然可能是这种情况,但您仍然可以通过cells 或structs 提出二维数组。

标签: matlab variables dynamic-programming


【解决方案1】:

你的免责声明听起来很有说服力 :-) 我也会得到那些反对票。但是,需要明确的是:为此使用单独的变量是不好的做法。

您可以使用assignin 创建变量并为其赋值:

for ii = 1:n
    assignin('base', ['user_' num2str(ii)], BigData(:,:,ii));
end

是的,为此使用单独的变量是不好的做法。

【讨论】:

  • 我还是不明白为什么他不能将BigData(:,:,ii) 的层提供给循环内的NN 函数,或者将其包装到一个单元格数组中。在其他地方使用它,仍然需要硬编码、user_1、...等。
  • GUI 不接受它,我只使用 matlab 不到一周,所以我还没有学会如何在脚本中调用 NN 函数。另一个原因是我需要提供一系列渐进且透明的用户友好变量,我的教授无需阅读我的每一行代码就可以理解它们的含义。就像我说的那样,我这样做并不是为了简单地违背良好的编码实践,这只是为了保存我迄今为止的数据进度。我将在我自己的代码中回到多维数组。和你一样,我很欣赏良好的编码实践。
  • 您能否明确说明哪个 GUI 需要命名二维数组? (你提到了神经网络——但我对此知之甚少
  • NN 工具箱弹出窗口仅识别您工作区中的二维变量。 3 维或更多维的任何内容都不是有效输入。
【解决方案2】:

尝试使用 eval() - 但正如您所说,它被视为非常糟糕的做法。如果你仍然想使用它,它是直截了当的:

for i = 1:n
    eval(['user_',num2str(i),' = BigData(:,:,',num2str(i),');']);
end

【讨论】:

  • 停止传播不良编程习惯并阅读我的个人资料描述。另外,根据你的逻辑,我可以说,枪支很糟糕,但是你去吧孩子,他们可以完成任务(戏剧性的)。
  • 我通过否决这种做法来增加价值,这样一旦他们的项目被难以理解的 eval 语句深度硬编码,新手就不会浪费时间调试噩梦代码。另外,我确实提出了一个问题,即 OP 免责声明绝对无效,除非他详细说明。
  • 好吧,在这个线程中一直在说使用这样的代码是没有好处的。所以每个读过这篇文章的人都不会忽视它。另一方面,它实际上可能会帮助某人学习一些东西。投反对票对这里的任何人都没有帮助。如果您想出一个有意义的解决方案,它将增加价值。
  • 我已经测试了这段代码,它可以工作。谢谢@Eli Duenisch。尽管问题的描述说我需要在不想要的情况下这样做,但我不明白为什么人们如此激进?我知道这不是最好的方法,但没有其他方法,当它需要完成时。此外,正如在对已接受答案的评论中更好地解释的那样,它还可以向我的教授表明我的数据已经/可以被分割。谢谢你的帮助!对我的工作不感兴趣的观众不需要成为 Matlab 专家即可阅读结果。虽然不应该真的需要所有这些解释。
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 2016-08-31
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多