我有一个N维的项目数组,其最后一个维度是数组的索引。
例如,如果数组A包含图像,则A(:,:,:,1)将是第一个图像,A(:,:,:,2)将是第二个图像,依此类推。
类似地,如果数组只包含整数,那么A(:,1)将是第一个整数,A(:,2)将是第二个整数,依此类推。
- = - = - = -
当我不知道它的维度是什么时,我想要删除A中的第一项。
如果A包含图像,我想这样做:
A(:,:,:,1) = [];
如果A包含整数,我想这样做:
A(:,1) = [];
问题是因为我不知道它是什么维度,我不知道要放多少冒号,我不知道如何在Matlab中表示“N-1冒号”。
我希望有一种程序化的方法可以做到这一点,但我坦率地不知道如果可能的话会搜索什么。
答案 0 :(得分:2)
您可以使用单元格以逗号分隔的列表扩展:
%// Build cell: {':', ':', ..., ':', [1]}
I(1:ndims(A)-1) = {':'};
I{ndims(A)} = 1;
%// Expand cell to comma separated list and delete:
A(I{:}) = [];
或使用num2cell
转换为单元格,然后使用cell2mat
转换回来:
C = num2cell(A,1:ndims(A)-1);
A = cell2mat(C(2:end));
我想除非你真的需要n维数组,否则使用n-1
维数组的单元格数组(在上面的代码中就像C
一样)这样做应该是一个明智之举简单的符号。