2017-02-23 72 views
0

允許我使用下面的示例從: How do i replace all elements of a vector with a scalar我如何用一個值替換矢量的所有元素?

它說:

我有一個載體(或陣列)

A = [2 3 4; 1 3 2]

我要替換的每個行中的所有元素與最後一個元素。下面的代碼按照OP的建議工作。

for ii = 1: size(A, 1) 
    B(ii,:) = A(ii,3) 
end 

返回:B = [4; 2]。然而,在我的情況下,我想檢索結果,使得原始變量A(而不是B)返回爲A = [4; 2]。我試圖複製BA但它給我我原來的陣列A而不是預期的結果。

回答

0

你應該只能夠循環

for ii = 1:size(A, 1) 
    B(ii, :) = A(ii, end); 
end 

A = B; 

後分配BA或者你也可以消除環路的全在一起,只要抓住的A

A = A(:, end); 

最後一欄如果您想要替換,全部A每行的元素與每行最後一列中的值您可以改爲:

A = A(:, repmat(end, [1, size(A, 2)])); 
+0

謝謝@Suever。這個問題是我需要'A'來進行循環內的進一步計算。有一系列IF語句決定是否應該替換第一,第二或第三個元素,然後在循環內進一步使用結果。有沒有辦法可以將'B'複製到循環中的'A'? – oma11

+2

@ oma11你不能吃蛋糕,也可以拿它,要麼保留'A',要麼改變它。這個答案中的第二個例子應該就是你想要的。簡單地說,不是將它分配回'A',而是直接在需要這個值的地方放置表達式'A(:,end)'。 – EBH

+0

@EBH這是一個很棒的觀察。第二個代碼完美工作。非常感謝。謝謝** Suever **的幫助。 – oma11

0

簡化無效冗餘元素。

A = [2 3 4; 1 3 2]; 

A(:,1:end-1)=[] 

結果:

A = 

    2  3  4 
    1  3  2 

A = 

    4 
    2 
+0

謝謝你的建議。它工作正常,但不在循環中。我同意我可以沒有循環,但是可惜我沒有提到循環已經存在於'A'之前,因此我只能在循環中有'A'。 – oma11

相關問題