A basic question of matrix indexing can't get a proper output

139 vues (au cours des 30 derniers jours)
Debaditya Chakraborty
Debaditya Chakraborty le 20 Mai 2019
Modifié(e) : DGM le 20 Fév 2024
Given matrix A, assign the second column of A to a variable v. Afterwards change each element of the last row of A to 0.
my code:
A = [1:5; 6:10; 11:15; 16:20];
v= A(1:4,2);
A(5, :) = zeros(1, 5);
  20 commentaires
Vishal
Vishal le 11 Jan 2023
make it -
......
A(5, :)= zeros(1,5);
Walter Roberson
Walter Roberson le 11 Jan 2023
Assigning to A(5,:) would be appropriate only for the cases where A happens to already have exactly 5 rows. The example A matrix has 4 rows, not 5. Assigning to A(5,:) for it would create a new row of zeros, whereas the requirements is that the last (existing) row of A is set to 0.

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 20 Mai 2019
Modifié(e) : Adam Danz le 16 Mai 2020
Here are some improvements to your code so that it works no matter what size A is.
A = [1:5; 6:10; 11:15; 16:20];
v= A(:,2);
A(end+1, :) = zeros(1, size(A,2));
Note that your instructions are to "change" the last row of A. That's not what your code is doing. You're adding a row of zeros. If you want to change the last row instead of adding another row,
A(end, :) = zeros(1, size(A,2));
Summary
Add a row of 0s to the end of matrix A
A(end+1,:) = 0;
Replace the last row of matrix A with 0s.
A(end,:) = 0;

Plus de réponses (7)

amjad khan
amjad khan le 3 Avr 2020
Modifié(e) : DGM le 4 Mar 2023
A = [1:5; 6:10; 11:15; 16:20];
v=A(:,2) % assigning variable v to the second column of matrix "A"
A(4,:)=0 % changing all the elements of row 4 to zeros
  1 commentaire
Adam Danz
Adam Danz le 3 Avr 2020
This is essentially the same answer as mine except that you're replacing the 4th row with 0s whether or not the 4th row is the last row. This is why I suggest using A(end,:) = 0 so that it will work for all sizes of A.

Connectez-vous pour commenter.


Badal Bhardwaj
Badal Bhardwaj le 12 Mai 2020
Modifié(e) : DGM le 4 Mar 2023
Answer is
A(4,1)=0
A(4,2)=0
A(4,3)=0
A(4,4)=0
A(4,5)=0
  7 commentaires
Adam Danz
Adam Danz le 12 Mai 2020
This isn't a correct answer to the question. The question asks how to change values of the last row of a matrix to zero, not the 4th row.
Walter Roberson
Walter Roberson le 12 Mai 2020
See the image 4th row is zero
The question does not ask to make the 4th row zero: the question asks to make the last row zero.
Do not use parenthesis at end of matrix
? Where did Adam use parenthesis at the end of matrix?

Connectez-vous pour commenter.


Ashim Bhat
Ashim Bhat le 20 Mai 2020
for assigning v
v = A(:,2);
for geeting zero values of last row of A
A(4,:) = 0
  2 commentaires
Walter Roberson
Walter Roberson le 20 Mai 2020
That assigns to the 4th row of A, which might not be the last row of A.
Adam Danz
Adam Danz le 20 Mai 2020
Example 1 of this method failing:
A = [1 2 3;
1 2 3;
1 2 3;
1 2 3;
1 2 3;
1 2 3];
A(4,:) = 0;
% Result
A =
1 2 3
1 2 3
1 2 3
0 0 0 % <--- wrong row
1 2 3
1 2 3
Example 2 of this method failing
A = [1 2 3;
1 2 3];
A(4,:) = 0;
% Result
A =
1 2 3
1 2 3
0 0 0
0 0 0 % <--- Now matrix A has 4 rows

Connectez-vous pour commenter.


Imane Tahar
Imane Tahar le 14 Nov 2020
A = [1:5; 6:10; 11:15; 16:20];
v= A(:,2)
A(end,:)= 0

Minal Kulkarni
Minal Kulkarni le 30 Juin 2021
A=[1:5; 6:10; 11:15; 16:20];
v=[ A(1,2); A(2,2); A(3,2); A(4,2)]
A=[1:5; 6:10; 11:15; 0,0,0,0,0]
  1 commentaire
Adam Danz
Adam Danz le 1 Juil 2021
Modifié(e) : Adam Danz le 12 Déc 2021
This is not a solution.
You're overwriting A instead of replacing the last row.
Indexing in the second line is very inefficient.
And the 2nd and 3rd lines assume A has 4 columns.
Please consider taking the Matlab on-ramp.

Connectez-vous pour commenter.


Muniba
Muniba le 3 Sep 2023
A = [1:5; 6:10; 11:15; 16:20];
v=A(1:end,2)
v = 4×1
2 7 12 17
A(end:4,1:end)=0
A = 4×5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0
  2 commentaires
Muniba
Muniba le 3 Sep 2023
This is the correct way.
DGM
DGM le 3 Sep 2023
Modifié(e) : DGM le 3 Sep 2023
This is arguably not the correct way, or at least not a robust way. Simpler and more robust answers have already been given.
It's unnecessary to do this. I think it just adds clutter that can make larger expressions less readable, but I suppose other opinions can exist.
%v=A(1:end,2) % is the same as
v=A(:,2) % just using :
The question asks to set the last row to zero. Your answer sets the fourth row to zero. There are four rows, so it's the same, right? Well, this only works if there are exactly four rows. If there are more than four rows, your method will fail silently, assigning nothing to zero. If there are fewer than four rows, it will set the last row (whichever that is) to zero, and add extra rows to the array such that it has four rows. If A had 3 rows, it will wind up with two rows of zeros.
%A(end:4,1:end)=0 % selects row 4, but only if there are exactly 4 rows!
A(end,:)=0 % select the _last row_!
There was no reason to add this extra complication and all its problems. The generalized solution is simpler to write and simpler to read.

Connectez-vous pour commenter.


Haris
Haris le 19 Fév 2024
Variable A must be of size [4 5]. It is currently of size [5 5]. Check where the variable is assigned a value.
  2 commentaires
Dyuman Joshi
Dyuman Joshi le 19 Fév 2024
@Haris, how exactly is your comment, which you have mistakenly posted as an answer, relate to this thread?
DGM
DGM le 20 Fév 2024
Modifié(e) : DGM le 20 Fév 2024
Nobody has given a clear description of the assignment, and almost all of the answers to this thread are either redundant, wrong, or both. As far as anyone here knows, there is no requirement that A is any particular size. In fact, it seems like a terrible idea to teach students to presume that inputs are a particular mystery size and then write code that relies on that presumption.
Of course, being a terrible idea makes it plausible that someone actually wrote an assignment like that, so if you are in a position to give a better description of the assignment, then by all means, go ahead.
Just because someone set the grader up so that it accepts bad code that panders to an overly simplistic test doesn't mean anybody should call the bad code "correct".

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by