我有:
X6 =
Columns 1 through 18
5 3 5 5 4 1 4 4 2 4 4 4 4 4 4 5 5 4
5 4 4 3 3 4 5 2 4 5 2 4 4 4 4 5 4 5
5 2 4 4 2 3 3 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 3 3 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 5 3 3 2 3 3 3 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 2 4 2 3 3 5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 4 4 5 4 5 5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2 5 5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Columns 19 through 27
4 5 4 4 4 4 3 3 4
3 3 4 NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN
我希望制作一个单元格X6cell
,逐行获取非零X6
值。
所以X6cell{1}={1x27}, X6cell{8}={1x4}
等...
for i=1:size(X6,1)
X6cell{i}=X6(X6(i,:)~=isnan);
end
不太对劲。
答案 0 :(得分:2)
你快到了。语法是:
for i=1:size(X6,1)
X6cell{i}=X6(i,~isnan(X6(i,:)));
end
(另一种选择:如果您还想忽略任何Inf值和NaN,您也可以使用isfinite(X6(i,:))
,这有时会很有用)
删除零(或任何个别号码):
for i=1:size(X6,1)
X6cell{i}=X6(i,X6(i,:)~=0);
end
要删除任意数量的数字,请使用~ismember
:
discard_values=[1 5 7 20 100];
for i=1:size(X6,1)
X6cell{i}=X6(i,~ismember(X6(i,:),discard_values));
end
要链接这些规则(为了清晰起见引入新变量),请使用&
:
discard_values=[1 5 7 20 100];
for i=1:size(X6,1)
indices_to_keep= ~ismember(X6(i,:),discard_values) & ~isnan(X6(i,:));
X6cell{i}=X6(i,indices_to_keep);
end