从Matlab中的表中删除所有变量中的NaN
问题描述:
我有一个包含多个变量的表,其中一些条目有NaN
's。我想更换所有NaN
为0,我能找到NaN
与此:从Matlab中的表中删除所有变量中的NaN
T = table(rand(200,1),[rand(199,1);NaN],rand(200,1));
Index = varfun(@isnan,T);
然而,当我尝试索引申请表,T:
T(Index)=0;
我得到以下错误:
You can not subscript a table using only one subscript. Table subscripting requires both row and variable subscripts.
有没有简单的解决方案,这一点,或者我需要改变,从表到矩阵?
答
问题似乎是Index
仍然是一个表,并且您始终需要使用row
和column
作为表的索引。我试了下面的代码(没有中间表Index
),它的工作原理,虽然我不确定这是最好的解决方案。
[i,j] = ind2sub(size(T),find(isnan(T{:,:})));
T(i,j) = {0};
答
一种方法是转换成数组,做逻辑索引替代,然后再回到表:
T = table(rand(200,1),[rand(199,1);NaN],rand(200,1));
t = table2array(T);
t(isnan(t)) = 0;
T = array2table(t, 'VariableNames', T.Properties.VariableNames);
另外,考虑仅使用数组,如果这是你可以接受的(无需转换或转换为表格)。
+1
我也认为数组是最好的解决方案时,只使用数字数据。 – Nemesis 2015-03-31 10:28:14
谢谢! 0的最终分配非常缓慢!你知道为什么,如果有更快的方法吗? – Mace 2015-03-31 07:57:59
不是,我没有太多的表经验。但是,你可以尝试'T {i,j} = 0'吗?也许细胞生成缓慢。 – Nemesis 2015-03-31 07:59:38
我试过了,但没有太大的帮助...... – Mace 2015-03-31 08:00:11