考慮 Matlab 中的三個行向量,A, B, C,每個的大小為1xJ。我想構建一個列出每個三元組D的大小矩陣,使得:Kx3(a,b,c)
a在位置A的A(a)。b在位置B的B(b)。A(a)-B(b)是 的一個元素C。c在位置C的A(a)-B(b)。A(a)并且B(b)不同于Inf,-Inf。
例如,
A=[-3 3 0 Inf -Inf];
B=[-2 2 0 Inf -Inf];
C=[Inf -Inf -1 1 0];
D=[1 1 3; %-3-(-2)=-1
2 2 4; % 3-2=1
3 3 5]; % 0-0=0
我希望這段代碼是高效的,因為在我的真實示例中,我必須多次重復它。
這個問題涉及到我剛才的問題在這里,但現在我正在尋找的元素的位置。
uj5u.com熱心網友回復:
您可以使用combvec(或任意數量的替代品)來獲取索引的所有配對a以及b對應的陣列A和B。那么這只是遵循您的標準的情況
- 找出差異
- 檢查哪些差異在
C - 洗掉你不關心的元素
像這樣:
% Generate all index pairings
D = combvec( 1:numel(A), 1:numel(B) ).';
% Calculate deltas
delta = A(D(:,1)) - B(D(:,2));
delta = delta(:); % make it a column
% Get delta index in C (0 if not present)
[~,D(:,3)] = ismember(delta,C);
% If A or B are inf then the delta is Inf or NaN, remove these
idxRemove = isinf(delta) | isnan(delta) | D(:,3) == 0;
D(idxRemove,:) = [];
對于您的示例,這會產生問題的預期結果。
你說,A和B至多7個元素長,所以你必須達到49個配對檢查。這還不錯,但讀者應該注意,對于更大的輸入,配對會快速增長。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318502.html
上一篇:如何在子圖中有灰度和彩虹色圖?
