2014-11-05 58 views
2

當我試圖以矩陣格式獲取數據時,我對MATLAB感到沮喪。但每次我只以單列格式回覆答案。我將說明我的問題:如何使用邏輯值並在另一個矩陣中選擇數據?

例如,

A = [1 -3 2;5 4 7;-8 1 3]; 

L = logical(mod(A,2)) 

L = 

    1  1  0 
    1  0  1 
    0  1  1 

現在我有另一組稱爲B基質樣品,C是輸出我想看到

B = [100 300 200;500 400 700;800 100 300]; 

C = B(L) 

C = 

    100 
    500 
    300 
    100 
    700 
    300 

我不不希望它保持爲單個列。我想知道我能做些什麼來使C以這種矩陣格式返回給我?

C = 

    100  300  0 
    500  0  700 
    0  100  300 

非常感謝,夥計們!

回答

3

邏輯索引將只選擇矩陣中邏輯矩陣爲真的元素。顯然這意味着它不能保留它的原始形狀,因爲元素的數量將會改變。有幾種方法可以做你想做的事情;最有效的大概是:

C = B; 
C(~L) = 0; 

這臺CB,將針對其L是假的零矩陣的每個元素。

+0

哇,很好用!我從來沒有想過解決這個問題的另一種方法。所以技術上的限制確實存在,但你真的快速而聰明地解決問題!再次感謝! – 2014-11-05 03:50:27

+0

也許最好將排除的元素設置爲'NaN'而不是'0'(這可能是'B'中的有效值) – Amro 2014-11-05 03:53:29

+0

這也是一個很好的建議,謝謝! – 2014-11-05 04:10:07

3

或者你可以用一個空矩陣開始並設置所需的元素:

C = NaN(size(B),'like',B); % or zeros(size(B),'like',B) 
C(L) = B(L); 
相關問題