Matlab:删除N维数组中N项为1的项目,其中N未知?

时间:2015-03-30 00:33:46

标签: arrays matlab

我有一个N维的项目数组,其最后一个维度是数组的索引。

例如,如果数组A包含图像,则A(:,:,:,1)将是第一个图像,A(:,:,:,2)将是第二个图像,依此类推。

类似地,如果数组只包含整数,那么A(:,1)将是第一个整数,A(:,2)将是第二个整数,依此类推。

- = - = - = -

当我不知道它的维度是什么时,我想要删除A中的第一项。

如果A包含图像,我想这样做:

A(:,:,:,1) = [];

如果A包含整数,我想这样做:

A(:,1) = [];

问题是因为我不知道它是什么维度,我不知道要放多少冒号,我不知道如何在Matlab中表示“N-1冒号”。

我希望有一种程序化的方法可以做到这一点,但我坦率地不知道如果可能的话会搜索什么。

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一样)这样做应该是一个明智之举简单的符号。