首页 > 解决方案 > 如何在 Matlab 中快速生成多维数组(或张量)?

问题描述

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

标签: arraysmatlabtensor

解决方案


您需要创建 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].

使用隐式扩展,您可以创建所需的数组:

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解决方案更有效。


推荐阅读