如何在Matlab中正确索引以删除元胞数组的连续及非连续列?
Matlab删除元胞数组多列的正确方法
错误原因
你遇到的报错A null assignment can have only one non-colon index.是因为Matlab对空赋值(= [])有严格规则:只能有一个维度使用非冒号的具体索引,另一个维度必须用冒号:或者省略(针对一维数组)。你写的mycells(1,[4:6,8,9]) = []同时指定了行索引1和列索引的具体集合,两个维度都是非冒号索引,所以触发错误。
正确写法
针对你这种1行的元胞数组,有两种简单的解决方式:
省略行索引,直接用列索引
因为是1行的行向量,单索引默认对应列维度,直接写:mycells([4:6,8,9]) = []这样只在列维度使用了非冒号索引,符合Matlab的赋值规则,能顺利删除指定列。
用冒号指定所有行(通用写法,适用于多行数组)
如果以后遇到多行的元胞数组,要删除某几列的所有行,就用冒号:表示所有行,列维度用具体索引:mycells(:,[4:6,8,9]) = []这个写法同样适用于你的1行数组,效果和第一种完全一致。
验证例子
比如先创建一个测试用的1行10列元胞数组:
mycells = num2cell(1:10); % 生成{1,2,3,4,5,6,7,8,9,10}
执行mycells([4:6,8,9]) = []后,mycells会变成:{1,2,3,7,10},符合预期。
内容的提问来源于stack exchange,提问作者Orestes_Fox
相关产品推荐
相关产品推荐

