Arrays Matlab中的N维数组索引:在中间查找数组
我使用的是N维数组,数组索引有问题。我的任务是在n维中数组中找到一个(n-1)维数组。 让我用3D数组详细解释一下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
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);