【问题标题】:Calling for sequential variables in Matlab loops在 Matlab 循环中调用顺序变量
【发布时间】:2014-11-17 18:58:10
【问题描述】:

我刚开始在 Matlab 中编程,所以我可能会问一个非常简单的问题。

假设我有 10 个变量,命名为:X_1、X_2 ... X_10。这些变量中的每一个都是一个 3x3 矩阵。

我想将“for 循环”中的各个矩阵乘以一个常数,并将它们存储在变量 Y_1、Y_2 ... Y_10 中。后者不会有问题,因为我知道如何将新变量按顺序存储在一个元胞数组中(也使用“for 循环”)。

我不知道如何在 j=1:10 的“for 循环”中调用 X 变量。我看过一些使用 'eval' 的答案,但很多人说这不是最有效的方法。

谁能帮帮我?

提前非常感谢!

【问题讨论】:

  • 你可以使用元胞数组或第三维(称为“页面”)吗?
  • 如果我做对了,要详细说明@DasKrümelmonster 对第三维的评论 - 与其创建这样的 10 个变量,不如使用大小为 3 x 3 x 10 的 3D 数组来存储所有这些数据首先?

标签: arrays matlab for-loop sequential


【解决方案1】:

绝对创建一个 3D 数组是最好的解决方案。

然后,如果您处理矩阵-矩阵或-向量乘法,则可以使用mtimesx 函数代替循环,这在 MATLAB 和其他解释语言中通常很慢,或者仅使用 bsxfun 进行元素乘法

X(:,:,1) = X_1;
X(:,:,2) = X_2;
%// and so on

constants = permute(1:10, [3,1,2])

Y = bsxfun(@times, X, constants);

【讨论】:

  • 感谢大家的帮助!虽然将变量存储在(3D)数组中很有用,但从您的答案看来,我必须第一次手动执行此操作,以便可以通过 X(:,:,n) 调用它们。如果我有 1000 个变量而不是 10 个变量怎么办?有没有办法调用它们以将它们顺序存储在数组中?
  • 您从哪里获取数据?可能您没有手动输入它们。您不需要将它们输入到中间数组中。手动可以直接放。 PS:请点赞或接受问题)
  • 再次感谢!我从不同的 Excel 文件导入数据。我通常会阅读大约 10 个不同的输入变量,每个变量都读了 20 年。这些变量中的每一个都可以是相对较大的矩阵(例如 5000 x 5000)。我想我必须第一次手动将它们存储在数组中(如您所建议的那样),然后通过循环调用它们。很有帮助!
  • 最好有 csv 文件(更标准)。但无论如何,当您阅读时,只需将它们分配到您的X,例如你有一个循环通过行索引n,然后将它们分配为X(:,:, n) = ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多