You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中正确索引以删除元胞数组的连续及非连续列?

Matlab删除元胞数组多列的正确方法

错误原因

你遇到的报错A null assignment can have only one non-colon index.是因为Matlab对空赋值(= [])有严格规则:只能有一个维度使用非冒号的具体索引,另一个维度必须用冒号:或者省略(针对一维数组)。你写的mycells(1,[4:6,8,9]) = []同时指定了行索引1和列索引的具体集合,两个维度都是非冒号索引,所以触发错误。

正确写法

针对你这种1行的元胞数组,有两种简单的解决方式:

  1. 省略行索引,直接用列索引
    因为是1行的行向量,单索引默认对应列维度,直接写:

    mycells([4:6,8,9]) = []
    

    这样只在列维度使用了非冒号索引,符合Matlab的赋值规则,能顺利删除指定列。

  2. 用冒号指定所有行(通用写法,适用于多行数组)
    如果以后遇到多行的元胞数组,要删除某几列的所有行,就用冒号:表示所有行,列维度用具体索引:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:35:21