【发布时间】:2016-09-15 02:36:14
【问题描述】:
我需要帮助来加快我创建的用于删除元胞数组中的 NaN 元素的函数。
用一个例子更好地解释我的功能。假设我们有一个元胞数组,我有一个indx{ii} 形式的元胞数组,其中每个ii 是一个大小为1xNii 的数组(这意味着数组具有不同的大小),上面有NaN 元素。
datawithNaN{1}=[1,4,8,6];
datawithNaN{2}=[4,6,2];
datawithNaN{3}=[9,8,NaN];
datawithNaN{4}=[3,NaN,NaN];
datawithNaN{5}=[NaN,NaN,NaN,NaN];
我希望函数函数做的是删除元胞数组中的所有 NaN 元素。所以这个例子的答案应该是:
datawithoutNaN{1}=[1,4,8,6];
datawithoutNaN{2}=[4,6,2];
datawithoutNaN{3}=[9,8];
datawithoutNaN{4}=[3];
datawithoutNaN{5}=[];
到目前为止,我已经编写了一个函数,它可以给我想要的结果,但是特别是在处理大单元阵列或单元阵列内的大阵列时需要太多时间。 我的功能是:
function result = rmNaN(datawithNaN)
[row_cell, col_cell] = size(datawithNaN);
result = cell(row_cell, col_cell);
for i=1:row_cell
for j=1:col_cell
[row,col]=size(datawithNaN{i,j});
if col>row
datawithNaN{i,j}=datawithNaN{i,j}';
[row,~]=size(datawithNaN{i,j});
end
for k=1:row
if ~isnan(datawithNaN{i,j}(k))
result{i,j}(k) = datawithNaN{i,j}(k);
else
continue
end
end
end
end
【问题讨论】:
标签: arrays matlab function nan cell-array