您好我需要忽略矩阵中的NaN
元素,请参阅下面的代码:
Coord = [230 400; 270 420; 300 400;340 430;390 380; 230 300;
300 290;370 280;250 200;290 200 ;320 200 ;200 190
;250 100 ;310 120; 410 110; 390 180;];
P = [1 6 7 3 2 1 NaN NaN;
3 7 8 5 4 3 NaN NaN;
6 9 10 7 6 NaN NaN NaN;
7 10 11 8 7 NaN NaN NaN;
6 12 13 14 10 9 6 NaN;
8 11 10 14 15 16 8 NaN];
您可以看到Coord
中的总行数和矩阵P
的最大值等于16
当我尝试这样做时:Coord(P(1,:),:)
我希望得到什么:
230 400
230 300
300 290
300 400
270 420
230 400
相反,我得到以下错误:
下标索引必须是实数正整数或逻辑。
答案 0 :(得分:1)
c = Coords(~isnan(P) | (P > 0))
p = P(~isnan(P) | (P > 0))
答案 1 :(得分:0)
一个好的开始是函数isnan(someVector)
。这将在someVector
包含someVector
值的索引中返回与NaN
true相同的逻辑长度。例如,
>> isnan(P(1,:))
ans = [0 0 0 0 0 0 1 1]
>> notNaN = ~isnan(P(1,:));
>> P(1,notNaN)
ans = [1 6 7 3 2 1]
这是一种忽略NaN
值的方法。对于零,我们可以做类似的事情,但是我们必须创建逻辑测试,而不是为我们做一个函数。你的矩阵没有零值,但这是我如何绕过所述值:
>> nonZero = P(1,P(1,:)~=0)
其中P(1,:)~=0
以与isnan(P(1,:))
答案 2 :(得分:0)
<强>输入:强>
P = [1 6 7 3 2 1 NaN NaN;
3 7 8 5 4 3 NaN NaN;
6 9 10 7 6 NaN NaN NaN;
7 10 11 8 7 NaN NaN NaN;
6 12 13 14 10 9 6 NaN;
8 11 10 14 15 16 8 NaN];
Coord = [230 400; 270 420; 300 400;340 430;390 380; 230 300;...
300 290;370 280;250 200;290 200 ;320 200 ;200 190;...
250 100 ;310 120; 410 110; 390 180;];
<强>代码:强>
for i = 1:length(P(:,1))
Q = P(i,isfinite(P(i, :)));
disp(Coord(Q,:));
end
<强>输出:强>
230 400
230 300
300 290
300 400
270 420
230 400
300 400
300 290
370 280
390 380
340 430
300 400
230 300
250 200
290 200
300 290
230 300
300 290
290 200
320 200
370 280
300 290
230 300
200 190
250 100
310 120
290 200
250 200
230 300
370 280
320 200
290 200
310 120
410 110
390 180
370 280