2017-02-13 8 views
-1

ich einen Vektor (oder Array)Wie ersetze ich alle Elemente eines Vektors mit einem Skalar

A = [2 3 4]

Ich möchte alle Elemente jeder Zeile mit einem skalaren Wert von 4. Ich habe ersetzen der Code:

for ii = 1: size(A, 1) A(ii,:) = 4 end

das gibt A = [4 4 4]. Wie kann ich eine 1x1 Matrix erhalten: A = [4] anstatt die 1x3 Matrix?

Vielen Dank im Voraus.

+2

Warum nicht einfach eine neue Variable erstellen, die skalar ist? – Aaron

+0

Danke @Aaron. Bitte beachten Sie meine Kommentare dazu. – User1772

+0

Ich verstehe nicht, warum Aarons Vorschlag nicht funktionieren wird. Ordnen Sie einfach einen Skalar zu. – rayryeng

Antwort

0

Danke Jungs für Ihre Kommentare. Obwohl es sagt, dass ich einen Skalar zuweisen sollte, hat es nicht gesagt, wie ich das effektiv machen könnte. Hier ist was funktioniert:

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

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

Sie können den NxM-Vektor/Matrix/Array durch eine skalare Variable ersetzen, indem Sie ihm einfach einen Skalar zuweisen.

Beispiel:

>>> A = [1,2,3] 
A = 
    [1 2 3] 
>>> A = 4 
A = 
    4 

Wenn ich mich recht erinnere, ein Skalar in MATLAB ist eine 1x1 Matrix

+0

Danke @sharifi. Dies wird nicht funktionieren, da ich das Ergebnis benötige, um weitere Berechnungen innerhalb der Schleife durchzuführen. In diesem Fall könnte sich der Wert von 'A' möglicherweise nach jeder Iteration ändern. Ich hoffe das macht Sinn? – User1772

+0

@ User1772 Ja ich denke ich verstehe. Ist es sicher anzunehmen, dass der Wert, den Sie "A" durch ersetzen, der letzte Wert in der 1x3-Matrix "A" ist? – robotHamster

+0

Ja, es ist sicher. Dies liegt daran, dass es einige "IF" -Anweisungen gibt, die A ersetzen, indem sie die ersten, zweiten oder letzten Elemente zuweisen. Vielen Dank! – User1772

-1
for i = 1:10 
    eval(['x_' num2str(i) ' = i^2']); 
end 

Diese Lösung hat zwei Probleme:

  1. erstellen Skalar ist langsamer als Weisen Sie einer Matrix einen Wert zu.
  2. Challeng, um später auf die neuen Skalare zu verweisen.

Quelle

https://www.mathworks.com/matlabcentral/answers/29712-creating-a-new-variable-in-each-iteration

+0

' eval' ist eine beschissene Lösung. -1. Bitte lesen Sie diesen informativen Beitrag von Loren Shure von MathWorks, in dem erläutert wird, warum 'eval' vermieden werden sollte und alternative Techniken, um zu erreichen, was' eval' tut: http://blogs.mathworks.com/loren/2005/12/28/evading- eval/ – rayryeng

+0

Der Link funktioniert nicht. Ich erwähnte jedoch den Nachteil dieser Methode. –

+0

Diese Nachteile haben nichts damit zu tun, warum 'eval' saugt. BTW, der Link funktioniert. MathWorks hatte wahrscheinlich ein vorübergehendes Problem. – rayryeng

Verwandte Themen