Arrays Matlab中的N维数组索引:在中间查找数组

Arrays Matlab中的N维数组索引:在中间查找数组,arrays,matlab,Arrays,Matlab,我使用的是N维数组,数组索引有问题。我的任务是在n维中数组中找到一个(n-1)维数组。 让我用3D数组详细解释一下A是一个已拆分为多个组的三维数组。在每个组中,都有b-组中二维数组的数量。我将其模拟为: b=5; A=rand(2,2,20); groups = reshape(A, size(A,1), size(A,2),b, []); groups是四维数组,第四维是多个组(这里是4) 为了在每组中找到中间位置,我添加了以下循环: for ii=1:size(groups,4) % L

我使用的是N维数组,数组索引有问题。我的任务是在n维中数组中找到一个(n-1)维数组。 让我用3D数组详细解释一下
A
是一个已拆分为多个组的三维数组。在每个组中,都有
b
-组中二维数组的数量。我将其模拟为:

b=5;
A=rand(2,2,20);
groups = reshape(A, size(A,1), size(A,2),b, []);
groups
是四维数组,第四维是多个组(这里是4)

为了在每组中找到中间位置,我添加了以下循环:

for ii=1:size(groups,4)  % Loop over all groups/slices
     middle(:,:,ii) = groups(:,:,(w-1)/2+1,ii);  % 1 2 3 4 5 : the middle is 3
end
middle
是一种三维数组,用于收集每组中的中间数组

正如您在我的示例中看到的,我使用了
b=5
(奇数)。我的问题是偶数
b

我尝试将其实现为(重写上面的循环)

但它不起作用。Matlab在
l=rem(w,2)行中给了我一个错误

你能告诉我怎么修吗?是否有其他实现方法?

您应该使用
ceil
floor
将索引四舍五入到您想要的元素:

middle_index = floor((w-1)/2+1);
在这里,4的中间是2,使用
ceil
可以选择索引3

接下来,您可以在单个索引操作中提取阵列:

middle = groups(:,:,middle_index,:);
最后,使用
挤压
重塑
去除第三个索引:

middle = squeeze(middle);

1234
中,哪一个是“中间的”?“Matlab在
l=rem(w,2)
行中给了我一个错误。”。错误是什么?“我觉得这条线很好。”比克我在想。我将取平均2分和3分
middle = squeeze(middle);