【问题标题】:Using a matrix of data inside a function in MATLAB在 MATLAB 中的函数内使用数据矩阵
【发布时间】:2018-05-17 06:59:16
【问题描述】:

我需要知道如何在函数中提取矩阵的任意条目。假设函数f 获得两个额外的输入参数ij 以提取固定实值矩阵的元素a(i,j)。矩阵在工作空间中,并且尺寸很大。函数f 在一个长迭代算法中。在每次迭代中调用整个矩阵a 会显着降低速度。该矩阵需要定义为函数(以便可以在函数中调用),或者从 ma​​t-file 加载。第一个选项似乎更有效,但不知道如何将矩阵保存为函数。

【问题讨论】:

  • 很高兴看到一些(最少的)代码,或者至少是伪代码,它们显示了您如何调用此函数以及为什么需要通过单独的函数访问数组。

标签: matlab function matrix mat-file


【解决方案1】:

我不明白你的问题。

假设您有数组arr。您可以通过arr(i,j) 访问其中的元素。

假设您在函数体中还有一个函数func(arr, i, j),您可以通过参数轻松访问arr(i,j)

如果func返回一个数组,那么你可以做var = func(arr); var(i,j)

如果您想要一个函数矩阵,请为它们制作句柄并将其存储在数组中;

a = @func_a;
b = @func_b;
c = @func_c;
funcarray = [a b c];

【讨论】:

  • 我们所说的数组是预先指定的并且是大尺寸的。我正在寻找一种从数据表中创建诸如arr(i,j) 之类的函数的方法。
  • @SaraWinslet 通常,您将数组传递给函数。由于 MATLAB 使用写入时复制,因此除非您更改其中的数据(假设您关心的是内存),否则该数组不会被复制到函数中。如果您已经知道感兴趣的数组和索引,为什么不直接将a(i,j) 传递给函数呢?你想解决什么问题?
  • 我将使用所有条目。函数本身在一个长迭代算法中。
  • @SaraWinslet arr(i,j) 是什么 - 它是一个数字吗?一个字符串?数组通常不包含函数。如果它是一个数字并且您只想对数组的那个元素进行操作,那么 beaker 是正确的——为什么不直接传递arr(i,j)
  • @SaraWinslet 我看到了你的编辑——你是说将arr 传递给f 并在f 内部建立索引会很慢吗?如果是这样,您是否对其进行了分析并确认是这种情况?如果你不改变f中的数组,只从它的索引中抓取,matlab不应该复制任何东西,它应该很快。
猜你喜欢
  • 1970-01-01
  • 2020-05-05
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多