2013-03-23 44 views
0

說你有兩個矩陣如下:填充像素與另一矩陣的值

A = [1 0.2 1; 0.4 0.4 1; 1 0.6 1; 0.9 0.7 1]; 

B = [33 75 250; 6 34 98; 55 3 4; 153 66 30]; 

說,我們要創建一個包含B其中A=1值的新矩陣C

我覺得在matlab我們可以做下面這樣的:

C = B(A==1);

但是,我怎麼能填補其他細胞的A原始值,因爲我認爲我們的情況,我們將剛得到B元素的矢量,它們對應的值在A=1?並且,我想要C具有B的相同尺寸,但其原始值爲A而不是等於1而不是具有0值。

+0

您的問題有問題,因爲您要求將'B'的某些值賦給'C',然後所有其他值都應該是'B'的值,這意味着最後'C'將會是與「B」相同。 – 2013-03-23 18:24:07

+0

是的,我也瞭解這一點,但我認爲他在談論保持維度,並用零填充其他值。 – mmumboss 2013-03-23 18:26:46

+0

對不起,我有**編輯**我的問題。我的意思是「A」而不是「B」的原始值。我的問題現在更清楚了嗎?謝謝 – Simplicity 2013-03-23 18:35:42

回答

1

是的,你可以做這樣的:

C= A.*(A~=1)+B.*(A==1) 

其中給出:

C = 

33.0000 0.2000 250.0000 
0.4000 0.4000 98.0000 
55.0000 0.6000 4.0000 
0.9000 0.7000 30.0000 
+0

感謝您的回覆。對於'0'值,我希望它們是'A'的原始值而不是'0'。這是我的主要問題。你知道我可以怎麼做嗎?我已經對我的問題進行了編輯**,如果你能看到它 – Simplicity 2013-03-23 18:33:45

+0

好吧,現在很清楚。我改變了解決方案,它基於相同的原理。 – mmumboss 2013-03-23 18:45:46

+0

非常感謝您的回答。只是好奇。 '。*'是什麼意思?我可以在哪裏找到關於它的更多信息? – Simplicity 2013-03-23 19:26:52

0

C將不得不反正初始化,所以讓我們把它初始化爲AC = A;。然後,MATLAB允許您索引C(A==1) = B(A==1);中的左側,以將C中的所有元素替換爲B中的所有元素,其中A == 1。所有其他元素將保持不變。

+0

感謝您的回覆。如果你能看到它,我已經對我的問題做了**編輯**。謝謝 – Simplicity 2013-03-23 18:36:27

+0

好的,這現在很有意義。我也更新了我的答案。 – 2013-03-23 18:45:04