MATLAB技术问询:如何将元胞数组的整行/整列替换为NaN?
解决MATLAB中元胞数组整行/整列替换为NaN的问题
你遇到的问题其实是没搞清楚MATLAB里元胞数组两种索引方式(()和{})的区别,咱们一步步来解决:
为什么原来的代码不生效?
test{2,:} = nan;:这是内容索引,它会尝试把第二行每个元胞里的现有内容替换成NaN,但如果是cell(3,2)创建的空元胞数组,MATLAB没法直接给空元胞赋值内容,所以这条语句要么报错要么不生效。test(2,:) = nan;:这是元胞索引,但nan是数值类型,不是元胞类型,MATLAB不能直接把数值赋值给元胞数组的位置,会提示类型不匹配。
正确的实现方法
方法1:空元胞数组整行替换
要把整行的每个元胞都变成存储NaN的元胞,得先创建一个和目标行长度匹配的元胞数组(每个元素都是NaN),再用元胞索引赋值:
test = cell(3,2); % 替换第二行为NaN(固定列数写法) test(2,:) = {nan, nan}; % 通用写法,不管列数多少都能用 test(2,:) = repmat({nan}, 1, size(test,2));
方法2:空元胞数组整列替换
整列替换逻辑类似,创建对应行数的元胞数组赋值即可:
test = cell(3,2); % 替换第二列为NaN(固定行数写法) test(:,2) = {nan; nan; nan}; % 通用写法 test(:,2) = repmat({nan}, size(test,1), 1);
方法3:已有数值内容的元胞数组替换
如果你的元胞数组里已经有数值型内容,想要把某行/列的元胞内容改成NaN,直接用内容索引赋值就行:
% 先给元胞数组填充数值 test = {1,2; 3,4; 5,6}; % 把第二行的内容替换成NaN test{2,:} = {nan, nan}; % 更简洁的写法,利用MATLAB赋值广播 test{2,:} = nan;
这种场景下test{2,:} = nan;是可以生效的,因为元胞里已有数值内容,MATLAB会自动把NaN赋值给每个元胞的内容。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

