arrays - 使用逻辑数组索引到矩阵

标签 arrays matlab matrix

我有一个矩阵A,它是m x n。我想要做的是计算一行中 NaN 元素的数量。如果 NaN 元素的数量大于或等于某个任意阈值,则该行中的所有值都将设置为 NaN

num_obs = sum(isnan(rets), 2);
index = num_obs >= min_obs;

就像我说的,我正在努力让我的大脑工作。正在尝试下面这条线的不同变体,但没有成功。

rets(index==0, :) = rets(index==0, :) .* NaN;

threshold >= 1 的示例数据是:

A = [-7 -8 1.6 11.9;
   NaN NaN NaN NaN;
   5.5 6.3 2.1 NaN;
   5.5 4.2 2.2 5.6;
   NaN NaN NaN NaN];

我想要的结果是:

A = [-7 -8 1.6 11.9;
   NaN NaN NaN NaN;
   NaN NaN NaN NaN;
   5.5 4.2 2.2 5.6;
   NaN NaN NaN NaN];

最佳答案

使用

A = magic(4);A(3,3)=nan;
threshold=1;

for ii = 1:size(A,1) % loop over rows
    if sum(isnan(A(ii,:)))>=threshold % get the nans, sum the occurances
        A(ii,:)=nan(1,size(A,2)); % fill the row with column width amount of nans
    end
end

结果在

A =

    16     2     3    13
     5    11    10     8
   NaN   NaN   NaN   NaN
     4    14    15     1

或者,作为 @Obchardon在他的评论中提到你可以向量化:

A(sum(isnan(A),2)>=threshold,:) = NaN

A =

    16     2     3    13
     5    11    10     8
   NaN   NaN   NaN   NaN
     4    14    15     1

作为旁注,您可以轻松地将其更改为列,只需对其他维度进行所有索引即可:

A(:,sum(isnan(A),1)>=threshold) = NaN;

关于arrays - 使用逻辑数组索引到矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809770/

相关文章:

matlab - matlab中相同算法的不同结果

c# - 无法将当前 JSON 对象反序列化为类型“WindowsService1...需要 JSON 数组(例如 [1,2,3])才能正确反序列化

algorithm - 如何在 Matlab 代码中为旅行商问题实现轮盘选择和排名选择?

c - 如何从 Matlab C API 调用 engClose() 并等待其进程关闭?

matlab - 在 Matlab 中使用 accumarray 对数据求和

c++ - 如何使用opencv C++将3D矩阵分成一堆2D矩阵

python - 使用多处理填充 3D 数组

c++ - 使用指针显示数组的值

java - 从 ArrayList 中捕获重复项

arrays - 如何在matlab中绘制特定点?