2013-05-21 62 views
0

我正在研究一種Matlab中的算法,要求定期更新矩陣的某些元素,並尋找最佳方法。下面是我想要達到的描述:改變二維數組中的某些元素

  1. 我有一個M×N陣列A和1×N個矢量B
  2. 基本上,矢量B是一個邏輯索引,它描述我需要選擇哪一列A,即C = A(:,B)
  3. 不幸的是,邏輯矢量B取決於某些過程而變化。這意味着C中的列數不固定。
  4. 一些其它處理將使用C作爲輸入,併產生另一個陣列D具有尺寸Csize(D) == size(C)
  5. 現在一樣,我需要「重塑」 D使得它具有大小爲A相同。棘手的部分是A中沒有在上面#2中選擇的那些列需要被替換爲NaN s。當然,我可以用粗糙的方式來使用循環。但我期待這樣做的Matlab的方式,即線性或邏輯索引,矢量化等,這是我現在卡住的地方。

一些例子來讓事情更清晰:

比方說

A = [1 2 3; 4 5 6; 7 8 9] 
B = [1 0 1] 
C = A(:,B) = [1 3; 4 6; 7 9] 

一些處理之後,我會得到D = [2 5; 6 7; 3 3]。現在,我需要通過填充NaN,即D = [2 NaN 5; 6 NaN 7; 3 NaN 3],將D「重塑」爲與A相同的尺寸。

我到目前爲止已經試過,

Atmp = NaN(size(A)); 
Btmp = find(repmat(B,[size(B,1),1])); 
Atmp(Btmp) = D(Btmp); %-> error because D is smaller than A. 

回答

2

如何

fullD = NaN(size(A)); 
fullD(:, B) = D; 
+0

行之有效。我知道這肯定是一件非常簡單的事情,但是我一直在試圖弄清楚這件事情。非常感謝。 – ciklee

+0

@ciklee非常歡迎您。 – Shai

相關問題