在多维数组中使用isnan进行索引

3个视图(过去30天)
Sagar Parajuli
Sagar Parajuli 2021年8月12日
我有这个代码:
负载lon_nonan_重塑_使用
idx = ~ isnan (lon_nonan_reshape_use);
lon_nonan_adj = lon_nonan_reshape_use (idx);
在上面的例子中,lon_nonan_reshape_use和idx的大小都是n*2,所以我希望lon_nonan_adj的大小也是n*2。MATLAB给出了n*1维的结果,因为lon_nonan_adj(:, 1)不等于lon_nonan_adj(:, 2),这是合理的。但我还是想把lon_nonan_adj变成一个n*2的矩阵nan保留在原来有nan的地方。你能帮忙吗?
4评论
Sagar Parajuli
Sagar Parajuli 2021年8月13日
我认为你们是对的,所以看起来我应该去掉所有的nan,只处理下面回答的no nan数据。非常感谢。

登录评论。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年8月12日
负载lon_nonan_重塑_使用
idx = ~所有(isnan (lon_nonan_reshape_use), 2);
lon_nonan_adj = lon_nonan_reshape_use (idx:);
如果行中至少有一个非nan,则会保留行。
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月13日
如果您想删除行中任何地方的NaN,那么
rmmissing(lon_nonan_重塑_使用)

登录评论。

答案(1)

Chunru
Chunru 2021年8月12日
带有nan的小矩阵
一个= randn (6,3);
a([2 11 13])=nan
一个= 6×3
0.5340 0.4891 NaN 0.2906 0.4462 -1.2660 -1.1701 2.0372 0.3616 -0.4775 0.3251 0.6966 NaN 0.1013 0.4787 1.2229 -0.6159
% idx
idx = ~ isnan (a)
idx =6×3逻辑阵列
1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1
(idx)
ans = 15×1
-0.5340 -1.2660 -0.3616 0.6966 0.4787 0.4891 0.2906 -1.1701 -0.4775 1.2229
因此,a(idx)是一个列矩阵,它基于原始a,通过删除所有的NaN并排列在列向量中。
如果您想删除带有NAN的所有行(您的问题看起来是这样的),那么您可以执行以下操作
idx1=全部(~isnan(a),2)
idx1 =6×1逻辑阵列
0 0 1 1 0 1
(idx1,:)
ans = 3×3
-1.2660 -1.1701 2.0372 -0.3616 -0.4775 0.3251 0.4787 1.2229 -0.6159
1评论
Sagar Parajuli
Sagar Parajuli 2021年8月13日
我喜欢你的最后一个解决方案,因为这是我最终需要的(删除所有nan的数据),以输入到“griddata”。谢谢你预见了我的问题。

登录评论。

标签

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!