考慮 Matlab 中的三個行向量,A, B, C,每個的大小為1xJ。我想構建一個D大小矩陣,Kx2列出每個可能的元素對,(a,b)使得:
a是 的一個元素A。b是 的一個元素B。a-b是 的一個元素C。a并且b不同于Inf,-Inf。
例如,
A=[-3 3 0 Inf -Inf];
B=[-2 2 0 Inf -Inf];
C=[Inf -Inf -1 1 0];
D=[-3 -2; %-3-(-2)=-1
3 2; % 3-2=1
0 0]; % 0-0=0
我希望這段代碼是高效的,因為在我的真實示例中,我必須多次重復它。
uj5u.com熱心網友回復:
如果J不是太大,以至于您可以負擔得起大小最大為J× 的兩個中間矩陣J,則可以以矢量化方式完成,這通常意味著它會很快:
A = [-3 3 0 Inf -Inf];
B = [-2 2 0 Inf -Inf];
C = [Inf -Inf -1 1 0];
[a, b] = ndgrid(A(~isinf(A)), B(~isinf(B)));
ind = ismember(a-b, C);
result = [a(ind) b(ind)];
這是通過生成滿足單個條件(例如有限)的所有對,然后選擇滿足聯合條件的那些對(例如它們的差異在一組規定的值中)來作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318503.html
