2014-03-28 85 views
1

儘管我有一個很簡單的問題,但我在舊帖子中找不到答案。我想要做的(以一種相當優雅的方式)是將值從一個向量映射/乘以另一個向量中的邏輯真實元素,並保持其維度。 所以,讓我們假設我有兩個向量,一個合乎邏輯的一個像map/multiply values to logical vector

a = [1,1,0,0,1,0,1,0] 

和另一個整數一個像

b = [3,1,7,4] 

現在我想將它們相乘,使我得到一個向量:

c = [3,1,0,0,7,0,4,0] 

對不起,如果我錯過了這裏的明顯,但我只是沒有找到一個答案的其他地方。

+0

你如何在數學中增加這些?該維度很重要。你的問題是:如何用向量b中的值替換向量a中的1(真)值? – NKN

+0

我的Matlab現在被破壞,如果不是,我會嘗試'c = a; c(a == 1)= a(a == 1)。* b' –

+0

是的,你是對的!我想用另一個向量中的值替換1!究竟! – kro

回答

2

這取決於一點,如果a是真正邏輯型的,或只是碰巧包含0/1。如果它是邏輯的,你可以直接用它索引:

c = zeros(size(a)); 
c(a)=b; 

如果不是,請參閱Divakar的答案。

+0

as'a'確實符合邏輯,你的答案是完美的!非常感謝! – kro

+0

+1好用於索引的邏輯數組:) – Divakar

1

一種方法是這樣 -

c = a; 
c(find(a==1)) = b; 
+1

只是'發現(一)'會順便工作,順便說一句。 – nkjt

+0

@nkjt我假設一個嚴格的情況,其中a不是一個邏輯數組,並且希望確保我正在與'1'進行數字比較。當然,我在'a = [1,1,0,0,1,0,1,0]'中分配了「完美零點」,但仍然如此。 – Divakar

+0

這工作正常,即使'a'不是邏輯類型。謝謝! – kro