0
我正在研究一種Matlab中的算法,要求定期更新矩陣的某些元素,並尋找最佳方法。下面是我想要達到的描述:改變二維數組中的某些元素
- 我有一個M×N陣列
A
和1×N個矢量B
。 - 基本上,矢量
B
是一個邏輯索引,它描述我需要選擇哪一列A
,即C = A(:,B)
。 - 不幸的是,邏輯矢量
B
取決於某些過程而變化。這意味着C
中的列數不固定。 - 一些其它處理將使用
C
作爲輸入,併產生另一個陣列D
具有尺寸C
即size(D) == size(C)
- 現在一樣,我需要「重塑」
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.
行之有效。我知道這肯定是一件非常簡單的事情,但是我一直在試圖弄清楚這件事情。非常感謝。 – ciklee
@ciklee非常歡迎您。 – Shai