簡體   English   中英

使用邏輯數組索引到矩陣

[英]Indexing into matrix with logical array

我有一個矩陣A ,它是mxn 我想要做的是計算一行中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;

您可以使用A ~= A來提取NaN元素,而不是isnan函數。

A(sum((A ~= A),2) >= t,:) = NaN

其中t是現有NaN元素的最小數量的閾值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM