繁体   English   中英

有没有一种方法可以从向量中快速提取零件而不会循环?

[英]Is there a way to quickly extract the parts from a vector without looping?

考虑我有一个向量/数组,它看起来如下:

在此处输入图片说明

每个部分都是一个大小固定且已知大小的子数组(只能通过索引访问,即它不是张量或高阶数组)。 因此,例如:

x1 = x(1:d);

如果d是每个子数组的大小。 每个子数组的大小是相同的,但可能会有所不同,具体取决于我们考虑的当前x。 但是,我们确实知道n(子数组的数量)和d(所有子数组的大小)。

我知道在Matlab中通常会有一些奇怪但有用的技巧来使事情更优化。 有没有一种方法可以使用可能的索引来提取那些内容,并创建一个矩阵,其中行(或列)是那些部分? 如:

X = [x_1, ..., x_n]

需要注意的是,n是一个变量,我们不知道它是什么。 我们可以找到n是什么,但它不是固定的。

我想尽量减少我在matlab中实际编写的for循环的数量,希望它更快...只是添加一些上下文。

首先,我将考虑简单的重塑以将输出保持为简单的双矩阵

x = (1:15).' %'
d = 3;

out = reshape(x,d,[])

并进一步使用索引来访问列out(:,idx)

不需要预先知道n ,因为reshape是基于dx的元素数来计算的。


out =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15

如果您坚持使用像单元格数组之类的东西, 请在带有ceil的 accumarray上获取sub

out = accumarray( ceil( (1:numel(x))/d ).', x(:), [], @(x) {x})

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM