Arrays 有没有一种方法可以在不循环的情况下从向量中快速提取零件?

Arrays 有没有一种方法可以在不循环的情况下从向量中快速提取零件?,arrays,matlab,vectorization,Arrays,Matlab,Vectorization,假设我有一个向量/数组,如下所示: 每个部分都是一个大小固定且已知的子数组(只能通过索引访问,即它既不是张量也不是高阶数组)。例如: x1 = x(1:d); 如果d是每个子数组的大小。每个子阵列的大小都是相同的,但它可能会根据我们正在考虑的当前x而有所不同。但是,我们知道n(子数组的数量)和d(所有子数组的大小) 我知道在matlab中通常会有一些奇怪但有用的技巧来做更优化的事情。有没有一种方法可以使用索引和生成矩阵来提取这些部分,其中行(或列)就是这些部分?例如: X = [x_1, .

假设我有一个向量/数组,如下所示:

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

x1 = x(1:d);
如果d是每个子数组的大小。每个子阵列的大小都是相同的,但它可能会根据我们正在考虑的当前x而有所不同。但是,我们知道n(子数组的数量)和d(所有子数组的大小)

我知道在matlab中通常会有一些奇怪但有用的技巧来做更优化的事情。有没有一种方法可以使用索引和生成矩阵来提取这些部分,其中行(或列)就是这些部分?例如:

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


<>我想最小化在MATLAB中实际写入的循环量,希望它能更快地……只是增加一些上下文。

< P>首先,我认为把输出保持为一个简单的双矩阵

是简单的。
x = (1:15).' %'
d = 3;

out = reshape(x,d,[])
更进一步,只需使用索引来访问列
out(:,idx)

无需事先知道
n
,因为
重塑
是基于
d
x
中的元素数来计算的



如果您坚持使用类似单元格数组的内容,请使用with来获取subs:

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

为了清楚起见,您需要从
x
中提取一个子数组
[x_i,…,x_j]
1@eigenchris是的,我们在大x中有子数组,我们知道每个子数组的长度相同。因此,考虑X(1:D),它得到我们X1。我将把这一点添加到细节中。那么,
d
是否有所不同?我迷失在
“每个子数组的大小都是相同的,但它可能会根据我们正在考虑的当前x而有所不同”
。是否添加示例输入输出数据?@Divakar给定一个x,d是固定的。但对于不同的x,d可能不同。另一种说法是,x是一个向量,它有部分x1,…xn,每个部分都是固定大小的d。但是对于同样由x'1,…x'n部分组成的不同向量x',这里部分的大小可能是d',而不是d。
out = accumarray( ceil( (1:numel(x))/d ).', x(:), [], @(x) {x})