【发布时间】:2015-04-24 09:07:02
【问题描述】:
我的数据在 Matlab 中被格式化为表格:T =
J K L M N O
121 1 1 a1 3b 1.72
121 2 1 2c 4d 1.43
0 3 1 e3 5f nan
299 4 1 g4 h5 1.64
299 1 2 4i 4j 1.48
0 2 2 6k nan 2.33
0 3 2 m7 8n nan
455 4 1 i4 j5 3.24
4 2 o8 p0 1.92
我想删除 J 列中包含零或 299 的每一行
我试过了
number_of_rows = size(T,1);
for i=1:number_of_rows
if T{i,1} == 299
T(i,:) = [];
end
if T{i,1} == 0.0
T(i,:) = [];
end
end
但我总是得到一个错误:
行索引超出表格尺寸。
我试图索引我想要删除的行:
number_of_rows = size(T,1);
todelete = zeros(size(T,1),1);
for ii=1:number_of_rows
if (T{ii,1} == 8.4) || (T{ii,1} == 1.5)
todelete(ii) = 1;
end
end
T(todelete,:) = [];
然后我得到一个我不明白的错误
下标索引必须是正整数或逻辑数。
为什么T(todelete,:) = []; 不起作用?
我刚刚找到了一个非常好的解决我的问题的方法。我使用函数
查找()
那么我要做的就是:
to_delete = find(T.K==0 | T.K==8.4);
T(to_delete,:) = [];
【问题讨论】:
-
我想我知道发生了什么。你听从了 Ander 的好建议,将 'i' 替换为 'ii'。看起来您忘记在某处替换它,现在您正在访问“变量(i)”,其中“i”代表虚构。所以这个错误告诉你你正在请求一个虚构的索引(这就是为什么它说它必须是真实的)。
-
也可能是您请求访问索引 0,这将来自您的 todelete = zeros(...)
-
我找到了一个非常好的解决方案:
标签: matlab if-statement for-loop