我正在嘗試創建一個函式,該函式將用 NaN 替換矩陣每一行中的重復值。我的代碼有效,只是我似乎無法將其應用于每一行。它將代碼應用于每一行,但只接受“n”作為列數,而不是行數,因此如果行數多于列數,則不會執行每一行。例如,如果我有 8 行和 6 列,它只會讓我為 n 輸入 6,而不是 8。但它會將代碼應用于行,但僅應用于前 6 行。這是一個作業示例:
X = [1 2 3 4 4 4; 1 2 3 4 5 5; 1 2 2 2 2 2; 1 2 3 3 3 3;
1 1 1 1 1 1; 1 2 3 4 4 4; 1 2 3 3 3 3; 1 2 2 2 2 2];
n=6
nanfill = nan(1,n);
for i=1:n
temp = [unique(X(i,:)), nanfill];
X(i,:) = temp(1:n);
end
它為我的原始矩陣提供了這個:
1 2 3 4 4 4
1 2 3 4 5 5
1 2 2 2 2 2
1 2 3 3 3 3
1 1 1 1 1 1
1 2 3 4 4 4
1 2 3 3 3 3
1 2 2 2 2 2
然后這是我在運行代碼后得到的新矩陣的輸出:
1 2 3 NaN NaN NaN
1 2 3 4 NaN NaN
1 2 NaN NaN NaN NaN
1 2 3 NaN NaN NaN
1 NaN NaN NaN NaN NaN
1 2 3 4 NaN NaN
1 2 3 3 3 3
1 2 2 2 2 2
如果我嘗試為“n”輸入行數 8,那么它會給我以下錯誤:
Unable to perform assignment because the size of the left side is 1-by-6 and the size
of the right side is 1-by-8.
uj5u.com熱心網友回復:
如果每行中的值始終不遞減,如您的示例所示,您可以使用以下內容。它計算每個條目與其左邊的條目之間的差異,NaN如果該差異為零,則寫入:
X([false(size(x,1),1) ~diff(X,[],2)]) = NaN;
uj5u.com熱心網友回復:
那是因為您的矩陣的行中有元素。您不能將長度為 8 個元素的向量分配給較短的向量。最好檢查行的長度,以便它們肯定匹配:
X = [1 2 3 4 4 4; 1 2 3 4 5 5; 1 2 2 2 2 2; 1 2 3 3 3 3;
1 1 1 1 1 1; 1 2 3 4 4 4; 1 2 3 3 3 3; 1 2 2 2 2 2];
n=size(X,2) % <- # of columns (length of one row)
nanfill = nan(1,n);
for i=1:n
temp = [unique(X(i,:)), nanfill];
X(i,:) = temp(1:n);
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/422686.html
標籤:
上一篇:是否可以在Windows上使用適用于Elixir的GithubActions?
下一篇:在matlab中插值
