【问题标题】:How can I generate a multidimensional array (or tensor) quickly in Matlab?如何在 Matlab 中快速生成多维数组(或张量)?
【发布时间】:2018-09-19 02:07:33
【问题描述】:

我尝试创建一个具有 3 个索引 k=0,...,K-1, m'=0,...,M-1, m=0,...,M-1 的 3d 数组。我可以以某种快速的方式生成这样一个 3d 数组,其中 (k,m',m) 位置的元素是 k/K+m'-m 吗?我目前的方法是使用 3 层 for 循环来计算每个元素。这有点笨拙,我相信必须有更好的方法。那么有人可以给我一些灵感吗?感激不尽。
顺便问个问题。我可以从矩阵A 和向量b 生成一个3d 数组吗?我的意思是b 中的每个元素都用A 进行一些计算,以便我们可以推导出一个 3d 数组?如何?

【问题讨论】:

  • MATLAB 使用基于 1 的索引,因此数组中不存在位置 (0,0,0)。
  • 也就是说,听起来您可能想要[k,m1,m2] = ndgrid(0:(K-1), 0:(M-1), 0:(M-1)); result = k/K + m1 - m2;
  • 谢谢!@jodag 你向我展示了一个强大的工具并帮助了我很多!:)

标签: arrays matlab tensor


【解决方案1】:

你需要创建 3 个向量:

 k  of size [1 x K x 1] ,
 mp of size [M x 1 x 1] and
 m  of size [1 x 1 x M].

使用implicit expansion 可以创建所需的数组:

K = 5;
M = 7;

k  = 0:K-1;
mp = (0:M-1).'
m  = reshape(0:M-1,1,1,[]);

result = k/K+mp-m;

请注意,它比ndgrid 解决方案更有效。

【讨论】:

  • 这很好。我倾向于忘记 MATLAB 自 2016b 以来支持隐式扩展!
  • 谢谢! @rahnema1 我已经测试了你的方法并且它有效。看起来很聪明,我会参考官方文档了解详细信息。谢谢!
  • 很高兴为您提供帮助..!
猜你喜欢
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2015-07-21
  • 2017-03-11
相关资源
最近更新 更多