所以我無法找到解決的簡單方法如下問題: 我有兩個矩陣具有相同數量的列:創建矩陣中的矩陣B的每一個元素髮現矩陣最接近元素A
A = [547 184 929 306;
296 368 776 509;
745 626 487 511;
189 780 436 818;
687 81 447 795]
B = [644 939 208 195 311 980;
379 876 301 226 923 439;
812 550 471 171 430 111;
533 622 230 228 185 258;
351 587 844 436 905 409]
如何創建矩陣C(size(C)= size(B)),其中矩陣B的每個元素從相應的行中找到矩陣A的最接近的元素。 在目前的情況下:
C =
547 929 184 184 306 929
368 776 296 296 776 509
745 511 487 487 487 487
436 780 189 189 189 189
447 687 795 447 795 447
就目前而言,我只想到了這一點:
temp = bsxfun(@eq,abs(bsxfun(@minus,repmat(A,1,1,size(B,2)),permute(B,[1,3,2]))),min(abs(bsxfun(@minus,repmat(A,1,1,size(B,2)),permute(B,[1,3,2]))),[],2));
C = permute(sum(temp.*repmat(A,1,1,size(B,2)),2),[1,3,2]);
那麼有沒有簡單的,更易於理解的方式來解決這個任務?
是否有任何其他的問題與你有可讀性的解決方案嗎? – kkuilla
我認爲你的實現正在做你想做的事情,如果你有可讀性方面的問題,你可以通過定義幫助變量來分割函數。否則,如果你真的不滿意你的解決方案檢查:[mathworks documentation:dsearchn](http://www.mathworks.de/de/help/matlab/ref/dsearchn.html)。這是一個鏈接到'dsearchn()'可以做到這一點。但我認爲TI搜索整個矩陣A而不是隻有一行 –
不是,一切正常,只有大量相同的功能困擾我。即使計算時間也不錯。 – user3493862