考虑到我有一个矢量/数组,它看起来如下:
每个部分是一些固定且已知大小的子数组(只能通过索引访问,即它不是张量或高阶数组)。例如:
x1 = x(1:d);
如果d是每个子数组的大小。每个子阵列的大小是相同的,但它可能会根据我们正在考虑的当前x而变化。但是,我们知道n(子数组的数量)和d(所有子数组的大小)。
我知道在matlab中通常会有一些奇怪但有用的技巧来做更优化的事情。有没有办法提取那些使用可能索引,并制作一个矩阵,其中行(或列)是那些部分?如:
X = [x_1, ..., x_n]
需要注意的是,n是一个变量,我们不知道它是什么。我们可以找到n是什么,但它没有固定。
我想最大限度地减少我在matlab中实际编写的for循环的数量,希望它更快......只是为了添加更多的上下文。
答案 0 :(得分:1)
首先,我会考虑简单reshaping将输出保持为简单的双矩阵
x = (1:15).' %'
d = 3;
out = reshape(x,d,[])
进一步使用索引来访问列out(:,idx)
;
没有必要提前知道 n
,因为reshape
正在根据d
和x
中的元素数量计算它}。
out =
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
如果您坚持使用单元格数组之类的内容,请使用accumarray和ceil来获取子代数:
out = accumarray( ceil( (1:numel(x))/d ).', x(:), [], @(x) {x})