在这篇文章中,我使用的术语切片来指代一个子阵列B_i的的Ñ维阵列A,使得size(B_i, d)为1,对于一些尺寸d. A由size(A, d)这些切片组成,沿着维度连接d.
例如,如果ndims(A)是6并且d是3,那么表单的表达式
A(:, :, i, :, :, :)
Run Code Online (Sandbox Code Playgroud)
为i在1:size(A, d)代表所有片(沿维度d组成)A.
类似表达式的问题A(:, :, i, :, :, :)在于它不能象征性地概括为沿着与具有不同于6的维数的数组中的3的维度不同A的切片.例如,为了沿着维度2 获得切片,需要不同的表达式,A(:, i, :, :, :, :).这意味着这样的表达式在代码中是无用的,这些代码与要从中提取切片的某个数组的形状无关.
下面的函数是我的matlab-noob尝试实现与形状无关的切片.(这个名字slice已经被采用,因此我调用了函数hslice,简称为hyperslice.)函数的策略是将输入数组重新整形为一个合适的三维数组,沿着重新形成的数组的第二维获取所需的切片,并将结果重新整形为具有原始输入数组的切片形状.
function out = hslice(ndarray, d, i)
sz = size(ndarray); …Run Code Online (Sandbox Code Playgroud)